【问题标题】:How to order tag filtering search result如何排序标签过滤搜索结果
【发布时间】:2013-05-16 16:12:34
【问题描述】:

我正在构建一个支持标签过滤器的搜索引擎。下面是我的数据库的结构,它是多对多表

product_table
id   name
1     p1
2     p2
3     p3

tagged_table
id  pid   tid
1    1     1
2    1     2
3    1     3
4    1     4
5    1     5
6    2     1
7    2     2
8    3     1
9    3     2
10   3     4

tag_table
id tag_name
1    t1
2    t2
3    t3
4    t4
5    t5
  • tagged_table.pid 指的是 product_table 的 id

  • tagged_table.tid 指的是tag_table的id

如果我想在找到任何匹配项时返回结果并按匹配的大多数情况的数量对结果进行排序,如何构建最快的 sql 查询?

【问题讨论】:

  • “最快”是一个奇怪的要求,当你没有任何要求时。尝试自己解决您的问题并返回更具体的内容,例如有效的查询
  • 已更新,我担心性能,因为它经过大量查询
  • 哈哈!和谷歌进行多对多规范化 (en.wikipedia.org/wiki/Many-to-many_(data_model))
  • 是的,目前的设计很糟糕
  • 如果只有一个人想被教。 OP 经常在这里提出一些问题,并期望所有的工作都会为他完成,这样他就可以将其复制粘贴到他们的项目中。在那种情况下,我的行为会被视为“粗鲁”和“无益”

标签: mysql search-engine


【解决方案1】:

感谢 zerkms,我将单表更改为“多对多关系”表(请参阅问题) 并使用一个简单的查询来解决我的问题。

SELECT COUNT(pid) AS matches FROM tagged_table WHERE tid IN (1,2,3,4) ORDER BY matches DESC

【讨论】:

  • matches 应该用反引号 ` 括起来而不是引号(如果你想把它括起来,或者只是省略anithyng)
猜你喜欢
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
  • 2012-07-05
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多