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

时间:2018-07-20 13:32:57

标签: mysqli

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

例如,可能有一行描述一个苹果,其中包含标签:“美味,红色,水果,酸,甜,绿色”。我希望此结果显示在类似"SELECT * FROM table WHERE info tags IN ('blue', 'red', 'yellow')"的查询中,因为它至少有一项重叠(“红色”)。有点像PHP中的“ array_intersect”。

我想如果每行只有一个标签,我可以使用IN,如果我只使用一个输入标签,但我都可以使用LIKE,但是两者都是动态长度的。我知道我可以遍历所有输入标签,但是我希望将其放在单个查询中。那可能吗?如果不是,是否可以使用其他结构将标签存储在数据库中以使其成为可能(除了逗号分隔的字符串以外)?

1 个答案:

答案 0 :(得分:0)

我认为最好的方法是创建tags表(id +标签),然后分离保存table_id和tag_id的“ table_tags”表。 这意味着使用JOINS获得最终结果。

另一种(但懒惰的)解决方案是在标签前加上逗号后缀,因此整列包含如下内容:

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

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