2009-12-17 3 views
1

У меня есть php-массив значений «первичного ключа», который соответствует только нескольким строкам очень длинной таблицы данных, сохраненных в базе данных MySql. Как я могу получить только один запрос только из этих строк. Возможно ли, или мне нужно сделать один запрос на первичный ключ? eg: SELECT * FROM table1 WHERE key = 8573Как получить только определенные строки из таблицы базы данных MySql

Спасибо, Патрик

+0

Не забудьте добавить индекс для своего стола. Запуск запроса по «длинной таблице данных» стоит дорого. Консидер добавляет следующее: alter table table1 add index (key) – Zepplock

ответ

4
Select * from table WHERE primary_key IN (8573,8574,8578) 

для массива PHP вы можете использовать лопаются

$key_array = implode(",", $array); 

Select * from table WHERE primary_key IN ($key_array) 
9

Вы можете использовать в MySQL IN() operator.

... WHERE x in (1,4,9,16) 
+0

IN - это немного серебряная пуля SQL, которую слишком много кодеров не используют ни потому, что они не знают об этом, либо забывают, что она существует. – TravisO

1

Два варианта:

select * from table1 where key in (8573, 5244, 39211); 
select * from table1 where key = 8573 or key = 5244 or key = 39211; 
0

Просто используйте эту форму выбора

SELECT * FROM table1 WHERE key IN (1234, 1235, 6789, 9876) 
0

Используйте PHP в Implode функции:

$keys = array(1,2,3,4); 
$sql = "SELECT * FROM table WHERE key IN (" . implode($keys, ",") . ")"; 
2

В большинстве баз данных, "ключ IN (набор)" работает быстрее, чем "ключ = а или ключ = Ь или ...".

Специально для PHP, вы можете использовать Implode для создания вашего SQL:

$ SQL = "выберите * из таблицы, где ключ в (" .implode ('', $ KeyArray)) ")"

.

Предполагая целочисленный ключ. С ключом строки, вам нужно цитировать их:

$ SQL = "выберите * из таблицы, где ключ в ('" .implode (" ''", $ KeyArray)). "')"

1

Используйте инструкцию OR.

SELECT * FROM table1 WHERE key=8573 OR key=9999; 

Конечно, это может получить очень долго, так что вы, вероятно, захотите использовать цикл и сцепить ключи к строке запроса.

1
$query = "SELECT * FROM tableName WHERE primaryKey IN ('" . implode("','", $keys) . "')"; 
Смежные вопросы