提问者:小点点

用于选择数据where的Mysql查询,where子句既包含逗号分隔的值,也包含单个值


我有一个mysql字段,它可能包含单个center_id值,如AB或csv值,如AB,AJ等。

目前我用PHP做以下工作:

$usercenter = $_SESSION['usercenter'];
$searchForValue = ',';
if( strpos($usercenter, $searchForValue) !== false ) {
$centerid = explode(',', $usercenter);
}
else  {
$centerid = $usercenter;    
}

在sql查询中,我需要:

SELECT id,node
FROM followup
WHERE center_id IN('".implode("','",$centerid)."')

如果有csv值,则工作正常。 如何编写查询来检查csv值和单个值??

请求帮助。。


共3个答案

匿名用户

给定您的模式,我能想到的唯一解决方案是使用一样。

从followup中选择id,节点,其中center_id类似“%ad%”

但这也将选择具有CADADA等的行,并且只能用于检查每个条件的单个选项(因此您必须使用/与多个like语句一起使用)

而且,您的解决方案是一种反模式。 通常情况下,您会使用一对多关系来实现这一点。

匿名用户

虽然它不使用索引值(因此对于巨大的数据集,它可能会相当慢),但您可以使用MySQL函数find_in_set()。 这可以在逗号分隔的列表中搜索单个值。

虽然它不能一次搜索多个值,但根据我在问题中的理解,您只是一次搜索一个值。

该函数获取要搜索的值(区分大小写!),然后获取要搜索的列。

SELECT id,node
FROM followup
WHERE FIND_IN_SET('AB', center_id)
  • DB小提琴

匿名用户

应该使用FIND_IN_SET()函数返回字符串在字符串列表中的位置。 它既可以使用逗号分隔的值,也可以使用单独的值。 请尝试以下查询

SELECT id,node
FROM followup
WHERE FIND_IN_SET('center_id','".implode("','",$centerid)."')