Скажите, у меня есть следующие 3 таблицы:
users
id : int 11 primary autoinc
email : varchar 255
tags
id : int 11 primary autoinc
name : varchar 255
tag_union
id : int 11 primary autoinc
tag_id : int 11
target_id : int 11
target_type : enum( 'user','blog','other' )
Если мне дают список тегов, скажем, 1,3 и 8, я могу выбрать всех пользователей, у которых есть объединение ЛЮБОГО тегов, например:
SELECT *
FROM `users`
WHERE `id` IN( SELECT `target_id`
FROM `tag_union`
WHERE `tag_id` IN( '1','3','8')
&& `target_type`=='user' )
Но как выбрать только пользователей, у которых есть объединение для ALL 3 тегов? Кажется, я не могу придумать, как это сделать одним запросом.
P.S. Извините за дерьмовый заголовок, кто-то может переименовать его, если придумает более подходящий.