Нужна помощь с SQL-запросом, чтобы найти вещи с большинством указанных тегов - PullRequest
1 голос
/ 06 октября 2010

Допустим, у меня есть следующие таблицы:

TAGS

id: целое число
name: string

POSTS

id: integer
body: text

TAGGINGS

id: целое число
tag_id: целое число
post_id: целое число

Как мне написать запрос, который выбирает всесообщения в порядке записи, содержащие наибольшее количество следующих тегов (атрибут name в таблице тегов): "Сыр", "Wine", "Paris", "Frace", "City", "Scenic", "Art"

См. Также: Нужна помощь с SQL-запросом для поиска вещей, помеченных всеми указанными тегами (примечание: похоже, но не дубликат!)

Ответы [ 2 ]

4 голосов
/ 06 октября 2010

В отличие от вашего связанного вопроса, здесь вы не указали, что вам нужно соответствовать ВСЕМ тегам Этот запрос работает для ЛЮБОГО.

SELECT p.id, p.text, count(tg.id) as TagCount
    FROM Posts p 
        INNER JOIN Taggings tg 
            ON p.id = tg.post_id
        INNER JOIN Tags t 
            ON tg.tag_id = t.id
    WHERE t.name in ('Cheese', 'Wine', 'Paris', 'Frace', 'City', 'Scenic', 'Art')
    GROUP BY p.id, p.text
    ORDER BY TagCount DESC
0 голосов
/ 06 октября 2010

Попробуйте:

   Select p.Id, p.Text, Count(*)
   From Posts p 
      Left Join (Taggings tg Join Tags t 
                    On t.Tag_Id = tg.Tag_Id
                       And t.name in     
                        ('Cheese', 'Wine', 'Paris', 
                         'Frace', 'City', 'Scenic', 'Art'))
         On tg.Post_Id = p.Post_Id
   Group By p.Id, p.text  
   Order By Count(*) Desc
...