选择修改列表后id IN(列表)不起作用的位置

时间:2013-07-17 21:50:42

标签: php mysql

这似乎是一个非常简单的问题,但它引起了我一个荒谬的头痛。

以下是我的问题: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;
}

2 个答案:

答案 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上的索引的意义上,这更有效。