【问题标题】:How to Select an Item with Multiple Hashtags如何选择具有多个主题标签的项目
【发布时间】:2016-12-06 09:20:01
【问题描述】:

我的数据库中有 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 并没有回答我的问题。

【问题讨论】:

  • 去掉WHERE语句会返回什么?
  • 它只返回所有组合在一起的表。对于没有标签的人,它将在 tag_name 字段中包含“NULL”
  • 在您的情况下尝试使用OR 而不是AND。你也收到错误吗?尝试做一些错误报告。
  • 如果我使用 or,那么如果我搜索多个标签,例如(“fat”、“smart”、“books”),它将返回 Benny。而本尼不属于“书籍”
  • person 列指定为p 后对我来说很好。有更新吗?

标签: php mysql


【解决方案1】:

你的 WHERE 子句永远不会起作用,因为单个标签行永远不会既胖又聪明。您需要获得两个不同的标签。 您没有提供数据,但我认为您正在为此尝试:

tags:
1 = fat
2 = thin
3 = smart
4 = dumb

person
1 = jack
2 = benny

所以如果 benny 又胖又聪明,maintag 有两行:

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

【讨论】:

    猜你喜欢
    • 2015-10-06
    • 2011-04-04
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多