我正在尝试创建一个查询,为了简单起见,它会搜索与一组博客帖子关联的一组标签并返回:
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
因此,查询正确搜索标记,但我想提取与这两个条目相关联的任何其他标记,因为我将在搜索结果中显示标记的超集。任何指导都表示赞赏。
答案 0 :(得分:0)
'从条目中选择entries.entry,tags.tag,在entries_tags.entry_id = entries.id上加入entries_tags,在tags.id = entries_tags.tag_id上加入tags标签,其中tags.tag如'%tag%''
SELECT entries.entry 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% ')natural join entries_tags
试试。
答案 1 :(得分:0)
根据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