【问题标题】:Similar rows in MySQLMySQL中的类似行
【发布时间】:2011-05-25 23:49:54
【问题描述】:

我正在尝试为房地产网站中的给定房产选择前十个最相似的房产,我想知道你们是否可以帮助我。我正在使用的变量是价格(int)、面积(int)、浴室(int)、卧室(int)、套房(int)、停车场(int)。目前我正在考虑按 ABS(a-b) 订购,但如果我每次查看房产时都必须计算它,那会不会很慢? (我不确定我是否可以缓存这个,因为数据库在不断更新)还有其他选择吗?

感谢您的帮助!

【问题讨论】:

  • 如果你担心它的速度,你能不能把它添加为另一个字段,并更新它。也许通过触发器?

标签: mysql similarity


【解决方案1】:

一种解决方案可能是创建一个包含准备好的结果的新表。像这样:-

property_id    similar_properties_ids
--------------------------------------
1              2,5,8
2              3,10
...
...

还有一个定期运行的 cron 对所有属性进行计算并填充 similar_properties_ids

因此,在运行时,您没有计算开销,但缺点是您得到的结果有点旧(在上次 cron 运行期间更新)。

【讨论】:

  • 这种数据库结构没有帮助 - 最好将相似属性的 ID 保存在表的不同行中。
  • 此表仅用于收集运行时相关属性的ID。存储属性的原始表是完整的。当 ID 存在时,如果需要有关相关属性的任何信息,则可以使用这些 ID 查询这些实际表。您可以为该表中的每个 property_id 为similar_properties_id 分别创建一行,但是您的更新和检索查询会变得有点复杂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多