我的架构看起来像这样:
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。