Моя схема выглядит примерно так:
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).
Я использую ORM Kohana 3, если есть решение таким способом.