我有一个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值和单个值??
请求帮助。。
给定您的模式,我能想到的唯一解决方案是使用和
一样。
从followup中选择id,节点,其中center_id类似“%ad%”
;
但这也将选择具有CAD
,ADA
等的行,并且只能用于检查每个条件的单个选项(因此您必须使用和
/或
与多个like
语句一起使用)
而且,您的解决方案是一种反模式。 通常情况下,您会使用一对多关系来实现这一点。
虽然它不使用索引值(因此对于巨大的数据集,它可能会相当慢),但您可以使用MySQL函数find_in_set()
。 这可以在逗号分隔的列表中搜索单个值。
虽然它不能一次搜索多个值,但根据我在问题中的理解,您只是一次搜索一个值。
该函数获取要搜索的值(区分大小写!),然后获取要搜索的列。
SELECT id,node
FROM followup
WHERE FIND_IN_SET('AB', center_id)
应该使用FIND_IN_SET()函数返回字符串在字符串列表中的位置。 它既可以使用逗号分隔的值,也可以使用单独的值。 请尝试以下查询
SELECT id,node
FROM followup
WHERE FIND_IN_SET('center_id','".implode("','",$centerid)."')