使用 MYSQLI 选择列的一部分与输入的一部分匹配的行

问题描述 投票:0回答:1

我有一个数据库,其中一列包含有关该行的一系列信息“标签”,这些信息“标签”存储为动态长度的逗号分隔列表(字符串)。我在 PHP 中使用 mysqli,并且我想选择其中任何项目与输入字符串中的任何项目匹配的行。

例如,可能有一行描述苹果,包含标签:“美味、红色、水果、酸、甜、绿色”。我希望它显示为如下查询的结果:

"SELECT * FROM table WHERE info tags IN ('blue', 'red', 'yellow')"
,因为它至少有一个项目(“红色”)重叠。有点像 PHP 中的“array_intersect”。

我认为如果每一行只有一个标签,我可以使用

IN
,如果我只使用一个输入标签,我可以使用
LIKE
,但两者都是动态长度。我知道我可以循环所有输入标签,但我希望将其放入单个查询中。那可能吗?如果没有,我可以使用不同的结构将标签存储在数据库中以实现这一点(除了逗号分隔的字符串之外的其他结构)吗?

sql mysqli where-clause intersection find-in-set
1个回答
0
投票

我认为最好的方法是创建

tags
表(id + 标签),然后单独保存 table_id 和 tag_id 的“table_tags”表。 这意味着使用 JOINS 来获得最终结果。

另一个(但懒惰的)解决方案是用逗号作为前缀和后缀标签,这样整个列就包含类似的内容:

,tasty,red,fruit,sour,sweet,green,

您可以进行 LIKE 搜索,而不必担心单词重叠(即红色与无聊),并且仍然可以使用

LIKE '%,WORD,%'

获得正确的匹配
© www.soinside.com 2019 - 2024. All rights reserved.