Сегодня 12 июля, суббота ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7281
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
RMCreative.ru - Блог
RMCreative.ru - Блог
Голосов: 1
Адрес блога: http://rmcreative.ru/feed/
Добавлен: 2008-06-12 21:34:00 блограйдером ZaiSL
 

Выбрать посты, содержащие все теги из списка

2011-08-12 02:44:23 (читать в оригинале)

В этом блоге примерно с середины 2007-го, когда я переписал его с файлового велосипедохранилища на нормальный SQL, появилась возможность выбрать посты, содержащие все заданные теги. В 2008-м возможность окончательно оформилась в теговую навигацию.

Изначальный способ выборки, который используется и сейчас:

SELECT *
FROM post p
 
JOIN post_tag pt1 ON pt1.post_id = p.id
JOIN tag t1 ON t1.id = pt1.tag_id AND t1.name = 'php'
 
JOIN post_tag pt2 ON pt2.post_id = p.id
JOIN tag t2 ON t2.id = pt2.tag_id AND t2.name = 'yii'
 
-- для каждого дополнительного тега добавляем ещё JOIN-ы

Недавно Максим подсказал способ поизвращённее:

-- Сначала выбираем посты с тегом yii и посты с тегом php
-- через IN. Если у поста и тот и тот тег, он будет выбран
-- несколько раз.
SELECT *
FROM post p
JOIN post_tag pt ON pt.post_id = p.id
JOIN tag t ON pt.tag_id = t.id
WHERE t.name IN ('php', 'yii')
-- Считаем количество раз, которые выбрался пост. Если оно
-- совпадает с количеством тегов в нашем списке, то это
-- означает, что у поста есть и тот и тот тег.
GROUP BY p.id
HAVING COUNT(pt.tag_id) = 2

Есть ли ещё интересные способы решения этой задачи?




 


Самый-самый блог
Блогер ЖЖ все стерпит
ЖЖ все стерпит
по сумме баллов (758) в категории «Истории»


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.