Php 如何在mysql中搜索逗号分隔的多个值
如何搜索由逗号分隔的多个值 例: 表名:searchTestPhp 如何在mysql中搜索逗号分隔的多个值,php,mysql,Php,Mysql,如何搜索由逗号分隔的多个值 例: 表名:searchTest id name keyword 1 trophy1 test1,test2,test3 2 trophy2 test2,test5 要点: 如果我搜索test2,结果Tropy1和Tropy2都应该显示出来 如果我搜索trophy1,那么trophy1应该是结果 如何解决这个问题 提前感谢您可以使用like select * from searchTest where keyword li
id name keyword
1 trophy1 test1,test2,test3
2 trophy2 test2,test5
要点:
select * from searchTest where keyword like '%test2%'
其中%是通配符。这些关键字必须存储在单独的表中我想说的是,在这里,您的数据结构非常不正确 更好的解决方案是不使用逗号分隔格式在一个字段中存储多个值,而是使用三个表,定义如下:
searchtest
id
name
关键字
id
word
keywords\u searchtest
id\u关键字
id\u searchtest
这样,在
searchtest
中搜索具有特定关键字的条目将非常简单:
select searchtest.*, keywords.*
from searchtest
inner join keywords_searchtest on keywords_searchtest.id_searchtest = searchtest.id
inner join keywords on keywords.id = keywords_searchtest.id_keyword
where keywords.word = 'test2'
此外,您还必须搜索具有特定名称的searchtest条目:
select *
from searchtest
where name = 'trophy1'
关于第1点:
从searchTest中选择*关键字,如“%test2%
关于第2点:
从searchTest中选择*,其中名称类似“trophy1%
select * from searchTest where keyword LIKE 'test2' or LIKE '%,test2' or LIKE 'test2,%'
我已经使用上面的查询完成了这项工作,使用MySQL字符串函数,如下所示:
SELECT * FROM searchTest WHERE FIND_IN_SET('test2', keyword) > 0
由于这最终将是一个由某些输入驱动的搜索,第一个查询可以通过使用OR子句来完成两个搜索,添加(不针对编码语言进行调整):keyword=var或searchtest.name=vari agree with Etherton。马丁:你能解释一下两个问题的必要性吗?@Fero:我实际上同意@Joel,至少在大多数情况下是这样;唯一需要两个查询的情况是,如果一个名称没有任何关键字:在这种情况下,内部连接将失败,并且不返回任何行(未测试,但这是应该发生的情况)。哦,这很正确。我没想到。感谢您的回复请注意:这将匹配一行,其中包含
test1、blahtest2glop、test3等内容;;;i、 它不仅匹配完整的标签,还匹配部分标签。你说的分数是什么意思:1。。2.您需要一个查询来处理这两种类型的答案,还是一次两个不同的答案。如果需要在同一个查询中处理两个“点”,您是否考虑过以不同的方式存储数据?我想您可能想在第一个片段中添加“%”,如“test2”
片段。可能类似“%”、test2、%%或类似“%”、test2”或类似“test2、%”