У меня есть 3 таблицы:SQL запросов - Регистрация на все строки предыдущего присоединиться к
- страница (номер, имя, DESC)
- page_tags (идентификатор, page_id, tag_id)
- tag_posts (tag_id, post_id)
Учитывая страницы в таблице страниц, я хочу, чтобы получить сообщения в таблице tag_posts где tag_id соответствует ALL tag_ids для данной страницы в таблице page_tags.
Например, если записи в 3-х таблиц:
1) страницы:
- [1, 'страница 1', 'некоторые убывание']
2) page_tags:
- [1, 1, 1],
- [2, 1, 2]
3) tag_posts:
- [1, 101],
- [2, 102],
- [1, 201],
- [3, 202]
Я сделал простой внутреннее соединение из 3-х таблиц, используя этот запрос:
SELECT tp.*
FROM pages p
JOIN page_tags pt ON pt.page_id = p.id
JOIN tag_posts tp ON tp.tag_id = pt.tag_id
WHERE 1
Однако, это возвращает строку 1, 2 и 3 из таблицы образцов tag_posts выше, тогда как я хотел только строки 1 и 2, так как эти две строки соответствуют ALL строки tag_id из первого соединения между страницами и таблицей page_tags.
Пожалуйста, дайте мне знать, как я могу это достичь. Примечание. Я использую mysql.
Мой первый присоединиться между страницами и page_tags, и это дает мне все теги для данной страницы. Я хочу, чтобы второе соединение давало мне сообщения, которые соответствуют всем тегам из первого соединения. Надеюсь, я четко изложил свое требование. – Rainbard
Ваша ссылка верная.В приведенном выше примере страница 1 ссылается дважды в таблицу page_tags. На английском языке, страница 1 имеет теги с идентификаторами 1 и 2. Эти теги ссылаются 3 раза в таблице tag_posts. В таблице tag_posts, Row 1 и 3 reference tag 1 и Row 2 reference tag 2. Вот почему вы получаете 3 тега для страницы 1, а не 2 тега. Дайте мне знать, если я неправильно интерпретирую ваши таблицы. –