Поиск MySQL и присоединение к супернабору тегов - PullRequest
0 голосов
/ 21 декабря 2011

Я пытаюсь создать запрос, который для простоты ищет набор тегов, связанных с набором сообщений в блоге, и возвращает:

1) Сообщения блога с тегами, которые соответствуют поисковому запросу. А ТАКЖЕ 2) Любые дополнительные теги, связанные с этим сообщением в блоге, не обязательно соответствующие поисковому запросу.

Сообщения блога хранятся в одной таблице:

table: entries
id  | entry
------------- 
1   | entry 1
2   | entry 2
3   | entry 3
...

и теги хранятся в другой таблице.

table: tags
id | entry_id | tag
---------------------------
1  | 1        | tag_1
2  | 1        | another
3  | 2        | another_tag
4  | 3        | third_entry        
....

Запрос MySQL структурирован следующим образом:

SELECT entries.entry, tags.tag FROM entries 
LEFT JOIN tags ON tags.entry_id = entries.id where tags.tag like '%tag%'

Возвращает:

entry     |    tag
--------------------
entry 1   |   tag_1
entry 2   |   another_tag

Итак, запрос правильно ищет тег, но я хочу получить любые дополнительные теги, связанные с этими двумя записями, так как я собираюсь отобразить расширенный набор тегов в результатах поиска. Любое руководство приветствуется.

Ответы [ 2 ]

0 голосов
/ 22 декабря 2011

Основываясь на рекомендациях alfa64, я создал следующий запрос, который теперь правильно извлекает найденные теги и извлекает любые дополнительные теги для каждого соответствующего сообщения в блоге:

SELECT q1.id, q1.entry, q1.tag from (select entries.entry, tags.tag from entries 
LEFT JOIN entries_tags on entries_tags.entry_id = entries.id 
LEFT JOIN tags on tags.id = entries_tags.tag_id where tags.tag like '%tag%') as q1 
JOIN entries_tags as et1 on et1.entry_id =  q1.id
JOIN tags as t2 on t2.id = et1.tag_id
GROUP BY t2.id
0 голосов
/ 21 декабря 2011

'выберите entry.entry, tags.tag из оставленных записей. Join join_tags on records_tags.entry_id = records.id оставил теги объединения в tags.id = records_tags.tag_id, где tags.tag похож на'% tag% ''

ВЫБРАТЬ records.entry из (выберите records.entry, tags.tag из записей, оставленных join_tags для records на records_tags.entry_id = records.id оставленных тегов объединения в tags.id = records_tags.tag_id, где tags.tag похож на '% tag%') естественное объединение records_tags

попробуйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...