如何选择具有多个Hashtags的项目

时间:2016-12-05 23:36:42

标签: php mysql

我的数据库中有3个表。

tags包含:tag_idtag_name

person包含:person_idperson_name

maintag包含:main_tag_idtag_idperson_id

例如,有一个名为Benny的人有标签new yorkfatsmart。每次我这样搜索:

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但这并未回答我的问题。

1 个答案:

答案 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%'