我的数据库中有3个表。
表tags
包含:tag_id
,tag_name
表person
包含:person_id
,person_name
等
表maintag
包含:main_tag_id
,tag_id
,person_id
例如,有一个名为Benny的人有标签new york
,fat
和smart
。每次我这样搜索:
SELECT p.person_name, p.gpa, p.phone_number FROM person p
LEFT JOIN maintag mg ON mg.person_id = p.person_id
LEFT JOIN tags t ON t.tag_id = mg.tag_id
WHERE t.tag_name LIKE '%fat%' AND t.tag_name LIKE '%smart%'
它将返回0.当我想选择具有多个标签的项目时,我的查询应该是什么样的?
我已阅读MySQL - select all items with multiple hashtags但这并未回答我的问题。
答案 0 :(得分:1)
您的WHERE子句永远不会起作用,因为单个标记行永远不会既胖又聪明。您需要获得两个不同的标签。 您没有提供数据,但我认为您正在尝试这样做:
tags:
1 = fat
2 = thin
3 = smart
4 = dumb
person
1 = jack
2 = benny
因此,如果benny胖而且聪明,维护就有两行:
maintag_id = 1 person_id = 2 tag_id = 1 (means benny is fat)
maintag_id = 2 person_id = 2 tag_id = 3 (means benny is smart)
你会选择这样的所有胖子:
SELECT p.person_name, p.gpa, p.phone_number FROM person p
LEFT JOIN maintag mg1 ON mg1.person_id = p.person_id
LEFT JOIN maintag mg2 ON mg2.person_id = p.person_id
LEFT JOIN tags t1 ON t1.tag_id = mg1.tag_id
LEFT JOIN tags t2 ON t2.tag_id = mg2.tag_id
WHERE t1.tag_name LIKE '%fat%' AND t2.tag_name LIKE '%smart%'