/ / виберіть, де id IN (список) не працює після зміни списку - php, mysql

виберіть, де ідентифікатор IN (список) не працює після модифікації списку - 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;
}

Відповіді:

0 для відповіді № 1
What happens if you change your query to this
SELECT * FROM table WHERE id IN ("$list");

0 для відповіді № 2

Ви хочете використовувати 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.