如果我有一个值,并且我想查看它是否在特定表格单元格中的一组值中,请知道我可以使用FIND_IN_SET
$myStr = 'b';
// myVals column contains 'a,b,c,d'
mysql> SELECT FIND_IN_SET(".$myStr.", myVals);
-> 2
但是,如果我有一串值需要检查其中任何一个是否在SET中呢?
$myStr = 'f,g,b,d';
有没有办法直接在查询中执行此操作,还是需要使用PHP运行某些循环?
答案 0 :(得分:5)
您的查询序列不正确。
你正在使用FIND_IN_SET(".$myStr.", myVals)
它应该是相反的方式。
FIND_IN_SET(myVals, ".$myStr.")
您可以将以下内容与mysqli_num_rows()
结合使用。
旁注:column_x
将是您要查询的列。
假设mysqli_
数据库连接库:
$myStr = 'f,g,b,d';
$query = mysqli_query($connection, "
SELECT column_x FROM table
WHERE FIND_IN_SET(column_x, '".$myStr."')
");
$num_row = mysqli_num_rows($query);
if($num_row >0)
{
echo "It exists.";
}
else
{
echo "It does not exist.";
}
参考文献:
答案 1 :(得分:0)
我认为您必须OR
检查IN
或FIND_IN_SET
s。 $myStr = 'f,g,b,d'
的结果是:
SELECT (
FIND_IN_SET('f', 'a,b,c,d') OR
FIND_IN_SET('g', 'a,b,c,d') OR
FIND_IN_SET('b', 'a,b,c,d') OR
FIND_IN_SET('d', 'a,b,c,d')
)
这应该很容易在PHP中制作,它仍然是1个查询。
虽然它不会返回任何索引。只是一个布尔。如果您需要第一个匹配的索引,则需要大量的IF或CASE。
答案 2 :(得分:-1)
MySQL Regexp绝对是实现目标的一种方式。