2012-02-28 5 views
27

Можно создать дубликат:
MySQL query using an array
Passing an array to mysqlMySQL PHP - SELECT WHERE id = array()?

У меня есть массив в PHP:

$array = array(1, 4, 5, 7); 

Как вы можете видеть, у меня есть множество различных значений, но я хочу написать инструкцию MYSQL, которая проверит, id: равно любому из значений в массиве. Например, если строка имеет id из 1, она вернет эту строку, то же самое для 4, 5 и 7. Длина массива может варьироваться в зависимости от характера программы, поэтому в этом проблема. Могу я просто сделать:

SELECT ... 
    FROM ... 
WHERE id = '$array' 

Или есть лучший способ?
Если бы я был неясен, пожалуйста, задайте мне дополнительную информацию.

+0

http://dev.mysql.com/doc/refman/5.0/ru/comparison-operators.html#function_in – jere

+0

См. Http://meta.stackexchange.com/questions/2950/should-hi-thanks -taglines-and-salutations-be-remove-from-posts –

ответ

91

Использование IN.

$sql = 'SELECT * 
      FROM `table` 
     WHERE `id` IN (' . implode(',', array_map('intval', $array)) . ')'; 
+2

Я думаю, что 'IN' является предпочтительным заявлением. Кроме того, спасибо, что показали мне, как разместить свой массив там. :) –

+2

, если у меня есть одинаковые идентификаторы в массиве, то я получаю данные в один раз, я хочу, чтобы много данных времени, что я должен делать для этого? –

+0

@DharaPatel У вас есть элементы, которые имеют один и тот же идентификатор? Это может быть плохое дизайнерское решение для обмена идентификаторами (при условии, что они являются первичными). – alex

18

Что вы ищете, это заявление IN(). Это будет проверяться, если заданное поле содержит любое из 1 или более значений.

SELECT * FROM `Table` WHERE `id` IN (1, 2, 3) 

Вы можете использовать простой цикл, чтобы преобразовать $array переменные в нужный формат. Не забудьте вспомнить SQL-инъекцию, если значения вашего массива поступают из передней части.

0

Вы можете написать свой запрос так:

select * from table where id in (1, 4, 6, 7) 

Вы можете добавить столько значения, сколько вам нужно.

0

SELECT WHERE id IN (item1, item2...). Просто запустите свой PHP-массив, чтобы построить массив для запроса.

9

Просто используйте ID IN() синтаксис:

$sql = "SELECT FROM `table` WHERE `ID` IN (".implode(',',$array).")"; 
0

Вы хотите использовать IN оператор:

$sql = 'SELECT FROM WHERE id IN (' . implode(",", $array) . ')';

Там может быть ограничение в MySQL на сколько значений вы можете использовать в списке с оператором IN.