MySQL - 如何按标签查询项目,按匹配的标签计数排序

时间:2011-08-29 13:09:48

标签: mysql sql kohana kohana-3 kohana-orm

我的架构看起来像这样:

items ( id, title, blah )
tags (id, name )
item_tags ( item_id, tag_id )

我想列出所有项目,其中项目的标签位于所选标签的数组中,然后按照与所选标签匹配的标签数量排序(例如[1,2,3])

到目前为止我所拥有的是:

SELECT *, COUNT(item_tags.tag_id) AS tag_count
FROM items
JOIN item_tags
ON item_tags.item_id = items.id
WHERE item_tags.tag_id IN (1, 2, 3)
GROUP BY items.id
ORDER BY tag_count DESC

这很有效,除了tag_count只获取所选项目的标签总数,我希望它是(1,2,3)中包含的标签数量。

带有标签(1,2,3)的项目应位于带有标签的项目(1,5,6,7)之前。

如果有解决办法,我正在使用Kohana 3的ORM。

2 个答案:

答案 0 :(得分:1)

只需将SELECT更改为:

SELECT *, COUNT(*) AS tag_count
.....

答案 1 :(得分:-1)

我认为你真正想要的是GROUP_CONCAT(tag_id)(可能除了你的计数之外)。小组concat将汇总您的ID,例如您已经显示的...... 1,2,3和1,5,6,7。如果您使用THAT列作为您的订单,那么您应该很好。

现在,也就是说,您可能必须强制进行连接过程的某些格式化以处理1,2,3之前的1,10,100之类的事情。因此,如果将连续的ID字符串格式化为... 2或3个职位,你会得到

001, 002, 003 
vs
001, 005, 006, 007 
vs
001, 010, 100

HTH