使用PHP数组搜索SQL DB中由逗号分隔的列

使用PHP数组搜索SQL DB中由逗号分隔的列,php,mysql,arrays,mysqli,Php,Mysql,Arrays,Mysqli,我在数据库中有一列标记为providers。此列可以有多个值,即(1,2,3,4,5)或(14,2,9,87)。我有一个数组,里面也填充了类似的值,比如(1,9,7,3)等等 我试图查询我的数据库并从表中返回结果,其中变量数组中的任何值都与列中由逗号分割的值相匹配 这就是我所拥有的 $variable=“1,9,3,4”; $sql=“从表格中选择id,提供者名称,在表格集合中查找(提供者,$variable”)” 然而,这是行不通的。如果DB中的列有多个值,则它不返回任何值。如果列只有一个值,

我在数据库中有一列标记为providers。此列可以有多个值,即(1,2,3,4,5)或(14,2,9,87)。我有一个数组,里面也填充了类似的值,比如(1,9,7,3)等等

我试图查询我的数据库并从表中返回结果,其中变量数组中的任何值都与列中由逗号分割的值相匹配

这就是我所拥有的

$variable=“1,9,3,4”;
$sql=“从表格中选择id,提供者名称,在表格集合中查找(提供者,$variable”)”

然而,这是行不通的。如果DB中的列有多个值,则它不返回任何值。如果列只有一个值,则返回的值很好。

我不确定,但应该可以解决您的问题。 例如:


但如果ID的顺序不同,则不起作用。

CSV应该是
find\u in\u set
的第二个参数。第一个应该是您正在搜索的单个值。因此,您应该将
$variable
拆分为多个值。大概是这样的:

$variable = "1,9,3,4";
$values = str_getcsv($variable);
foreach($values as $value) {
    $sql = "SELECT id, provider FROM table_name WHERE FIND_IN_SET($value, provider)";
    //execute $sql here
}
我应该这样做

在您之前的方法中,
find\u in_set
是在查找
1,9,3,4
,而不是您想要的
1
9
3
、或
4
。该手册还说明了使用该功能的行为将不起作用

如果第一个参数包含逗号(,)字符,则此函数无法正常工作


您应该在将来有时间时更新该表,以便使其正常化。

这就是您应该更新的原因之一。@Jeff遗憾的是,我没有询问有关正常化的问题。这不是一个选项,但目前我正在努力。同时,问题还是一样的。@Jeff nevermind,我坐在那里思考,也许已经找到了一种正常化的方法。当你第一次这样做的时候,你会避免很多挣扎!快乐编码!定位不工作。返回DB表中的每个字符串,或者不返回任何内容。或者,您可以使用FIND_in_SET,但对于每个元素,使用and和concat<代码>$fis=[];foreach(将(',',$变量)分解为$id)$fis[]=“在_集合中查找_($id,provider)”$sql.=内爆('AND',$fis)
$variable = "1,9,3,4";
$values = str_getcsv($variable);
foreach($values as $value) {
    $sql = "SELECT id, provider FROM table_name WHERE FIND_IN_SET($value, provider)";
    //execute $sql here
}