在一组其他值中查找值

时间:2015-03-05 22:17:22

标签: php mysql

如果我有一个值,并且我想查看它是否在特定表格单元格中的一组值中,请知道我可以使用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运行某些循环?

3 个答案:

答案 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检查INFIND_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绝对是实现目标的一种方式。