我有一个表names
,在该表中有一个字段info
数据是这样的:
ID info
1 'alpha,romeo,ciera,delta'
2 'testing,temp,total'
我正在尝试创建一个选择查询。
select * from names where info like '%$var%'
$var
是来自php的数据。
问题是我想要完全匹配。如果我使用上面的查询和$ var if 数据为
rome
,然后它还返回罗密欧行。
又一个例子 -
表格中的数据为testing,temp,total
用户输入数据为test
,然后它还会返回testing
我试过
select * from names where info like '$var%'
和
select * from names where info like '%$var'
但它并没有像我预期的那样返回数据。
请告知我如何实现这一目标。
注意 - :这是一个我不使用mysql作为折旧的例子。我正在使用mysqli
答案 0 :(得分:4)
在目标搜索字符串的开头和结尾添加,
。
然后确保您的源字符串也包含,
<强> SQL Fiddle Demo 强>
select *
from names
where concat( ',', info , ',') like
concat( '%,', $var, ',%')
问题是这不会使用任何索引。你应该去FULL TEXT
搜索
答案 1 :(得分:2)
在查询中使用,
将其用作分隔符,并使用多个条件来考虑&#34;边缘情况&#34;。
SELECT *
FROM names
WHERE
info LIKE '%,$var,%' OR
info LIKE '$var,%' OR
info LIKE '%,$var' OR
info = '$var'
如果您的行包含info
列:
α,的罗密欧下,CIERA,δ-
测试,温度,总
的罗马强>
FOO,测试,酒吧
柏林,巴黎,马德里,伦敦,的罗马强>
威尼斯,米兰,的罗马下,firence
黑,的克罗姆强>
的罗马下,FOME,MOME,科梅,科梅
使用$var
作为"rome"
的查询将选择:
<强>罗马强>
柏林,巴黎,马德里,伦敦,的罗马强>
威尼斯,米兰,的罗马下,firence
的罗马下,FOME,MOME,科梅,科梅
但不是:
α,的罗密欧下,CIERA,δ-
黑色, crome
答案 2 :(得分:2)
问题是我想要完全匹配。如果我使用上面的查询而在$ var中如果数据是罗马,那么它也会返回罗密欧的行。
请勿使用LIKE
运算符,请使用完全匹配运算符=
select * from names where info = '$var'