Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте, подскажите как сделать такую выборку:
Есть таблица связей (например id новости и присвоенного тэга)
newsId tagId
5 5
5 6
5 7
5 8
6 9
6 10
6 11
7 12
7 14
8 15
Есть входящий массив id тэгов (допустим 5,6,7,8)
Как сделать выборку при которой будет получен id новости у которой есть все вхождения id тэгов?
Может быть есть какая то модификация оператора IN, которая позволяет выбирать по всем значениям?
Заранее, Спасибо.
Неактивен
Только самообъединением:
SELECT t1.newsId
FROM tablename t1
JOIN tablename t2 ON t2.newsId = t1.newsId
JOIN tablename t3 ON t3.newsId = t1.newsId
JOIN tablename t4 ON t4.newsId = t1.newsId
WHERE t1.tagId = 5 AND t2.tagId = 6 AND t3.tagId = 7 AND t4.tagId = 8
Неактивен
зачем так запутано???
достаточно ваш массив представить в строчном виде:
'5','6','7','8'
пример:
$arr = array(5,6,7,8);
$arr_lists = '\'' . implode ( "','", $arr ) . '\''; //разбиваем массив с одинарными ковычками и запятой + ставим эти кавычки по краям
$r = mysql_query ( "SELECT * FROM table WHERE `id` IN (" . $arr_lists . ")" );
Неактивен
Потому что требуется, чтобы у новости были все указанные тэги, а не хотя бы
один из них. Ваша схема реализует операцию «или».
Неактивен
верно, невнимательно прочитал что требуется.
Неактивен