Farsh
~ on ~ high ~ wave ~
join, exists - возник тупой вопрос
Добрый вечер.
Извините, что я немного туплю
Схемы таблиц выкладывать не буду, смысла нет, все и так понятно.
И так, у нас имеются 3 таблицы ( many to many ) :
tag, document, tag_to_document
Запрос вида :
Задача: выбрать все документы со всеми ассоциируемыми тагами, но чтоб в этих тагах был 'tag_name'
(или представим реальную ситуацию - юзер кликает на таг, а ему вываливаются все документы, ассоциированные с этим тагом + все таги к этим документам).
Сходу подумал типо такого, предполагая, что сначала мы отрежем все документы, к которым нужный таг не относится ( inner join ), а потом сделаем уже полноценный join, получив все таги, но этот вариант неверный:
p.s. юзаю Doctrine
Добрый вечер.
Извините, что я немного туплю

Схемы таблиц выкладывать не буду, смысла нет, все и так понятно.
И так, у нас имеются 3 таблицы ( many to many ) :
tag, document, tag_to_document
Запрос вида :
Выбирает все документы со всеми ассоциируемыми тагами.SELECT d.id as document_id, t.name as tag_name
FROM document d
LEFT JOIN tag_to_document td ON d.id = td.document_id
LEFT JOIN tag t ON t.id = td.tag_id
Задача: выбрать все документы со всеми ассоциируемыми тагами, но чтоб в этих тагах был 'tag_name'
(или представим реальную ситуацию - юзер кликает на таг, а ему вываливаются все документы, ассоциированные с этим тагом + все таги к этим документам).
Сходу подумал типо такого, предполагая, что сначала мы отрежем все документы, к которым нужный таг не относится ( inner join ), а потом сделаем уже полноценный join, получив все таги, но этот вариант неверный:
Как же все-таки сделать это 'in true way' ?SELECT d.id as document_id, t.name as tag_name
FROM document d
LEFT JOIN tag_to_document td ON d.id = td.document_id
INNER JOIN tag t_check ON t_check.id = td.tag_id AND td.tag_name = 'tag_name'
LEFT JOIN tag t ON t.id = td.tag_id
p.s. юзаю Doctrine