Подтвердить что ты не робот

MySQL - Как выбрать строки, в которых значение находится в массиве?

Хорошо, обычно я знаю, что вы бы сделали что-то вроде этого, вы знали значения массива:

SELECT * WHERE id IN (1,2,3)

Но... Я не знаю значение массива, я просто знаю значение, которое я хочу найти в "сохраненном" массиве:

SELECT * WHERE 3 IN (ids) // Where ids is stored as 1,2,3

Что не работает. Есть ли другой способ сделать это?

4b9b3361

Ответ 2

К тому времени, когда запрос попадает на SQL, вы должны уже расширить список. Легкий способ сделать это, если вы используете идентификаторы из какого-то внутреннего надежного источника данных, где вы можете быть на 100% уверены, что они целые (например, если вы выбрали их из своей базы данных раньше):

$sql = 'SELECT * WHERE id IN (' . implode(',', $ids) . ')';

Если ваши данные поступают от пользователя, вам нужно убедиться, что вы получаете только целые значения, возможно, наиболее легко:

$sql = 'SELECT * WHERE id IN (' . implode(',', array_map('intval', $ids)) . ')';

Ответ 3

Если вы используете функцию FIND_IN_SET:

FIND_IN_SET(a, columnname) дает все записи, которые имеют "a" в них, отдельно или с другими

И

FIND_IN_SET(columnname, a) выводит только записи, которые имеют "a" только в них, а не те, что у других

Итак, если record1 является (a, b, c), а record2 является (a)

FIND_IN_SET(columnname, a) дает только запись2, тогда как FIND_IN_SET(a, columnname) дает обе записи.

Ответ 4

Если элемент массива не является целым числом, вы можете использовать что-то вроде ниже:

$skus  = array('LDRES10','LDRES12','LDRES11');   //sample data

if(!empty($skus)){     
    $sql = "SELECT * FROM `products` WHERE `prodCode` IN ('" . implode("','", $skus) . "') "      
}