这似乎是一个非常简单的问题,但它引起了我一个荒谬的头痛。
以下是我的问题:SELECT * FROM table WHERE id IN ($list);
让我们说清单是:1,2,3,4,5,6
在第一次执行查询时,它运行良好,检索请求的行。
然后,我删除了一个值:1,2,4,5,6
突然,查询什么都没检索。
我回音$list
,$list
显示1,2,4,5,6
我将IN ($list)
替换为IN (1,2,4,5,6)
,效果非常好。
我错过了什么?
下面是删除一个值的代码:
function removeFromList($id, $list){
$ider = ','.$id.',';
if($list[strlen($list)-1] == ','){
if($list[0] != ','){
$list = ','.$list;
}
$list = str_replace($ider, ',', $list);
if($list[strlen($list)-1] == ','){
$list[strlen($list)-1] = '';
}
if($list[0] == ','){
$list[0] = '';
}
} else {
if($list[0] != ','){
$list = ','.$list;
}
$list = $list.',';
$list = str_replace($ider, ',', $list);
if($list[strlen($list)-1] == ','){
$list[strlen($list)-1] = '';
}
if($list[0] == ','){
$list[0] = '';
}
}
return $list;
}
答案 0 :(得分:0)
What happens if you change your query to this
SELECT * FROM table WHERE id IN ('$list');
答案 1 :(得分:0)
您想使用find_in_set()
:
SELECT * FROM table WHERE find_in_set(id, $list)
在in
语句中,列表代表单值1,2,3,4,5
。
另一种方法是直接创建带有列表的SQL语句:
"SELECT * FROM table WHERE id in (".$list.")"
在查询可以利用id
上的索引的意义上,这更有效。