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

标签 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。

最佳答案

只需将您的 SELECT 更改为:

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

关于MySQL - 如何按标签查询项目,按匹配标签计数排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7230534/

相关文章:

MySql 函数与 kohana ORM

join - 使用 JOIN & ON & AND 的 Kohana 数据库查询生成器

mysql - 多表连接是否会减慢mysql

mysql 数据透视查询和排名查询

mysql - SYSDATE 与以 MM-DD 格式存储的日期之间的日期差异

java - 没有在 ResultSet 中获取 MySQL SELECT LPAD()

使用查询构建器进行 Kohana 3 跨表更新

mysql - .NET EF4.1 + MySQL 的类继承

php - 将 mysql 代码转换为 codeigniter

mysql - 如何在数据库中实现自定义字段