-1

这似乎是一个非常简单的问题,但它让我非常头疼。

这是我的查询: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;
}
4

2 回答 2

0
What happens if you change your query to this
 SELECT * FROM table WHERE id IN ('$list');
于 2013-07-17T22:44:36.287 回答
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.

于 2013-07-17T22:49:28.517 回答