select where in($array)

Renny

Новичок
select where in($array)

есть массив данных ($arr), в нем 1000 числовых значений.

надо вытащить из базы все записи у которых top равен любому значению из массива $arr.

Делаю так:

1 Собираю длиннющюю строку в цикле, вида $str=$arr[0].",".$arr[1].",".......$arr[1000]

2 создаю запрос
PHP:
select * from qvest where top in($str)
Так вот вопрос, как оптимизировать это, а то уж больно длинная строка получается.


Если просто сделать, так:
PHP:
select * from qvest where top in($arr)
то, выдает ошибку
PHP:
Unknown column 'Array' in 'where clause'
 

ForJest

- свежая кровь
$str = implode(',', $arr);
Оптимизировать - способы:
1. Сделать выборку частями - по 100 значений, к примеру. Результаты находить пересечение по [m]array_intersect[/m]
2. Занести все значения во временную таблицу (CREATE TEMPORARY TABLE tmp_top(top INT NOT NULL), INSERT...) и сделать потом
[sql]
SELECT * FROM qvest AS q
INNER JOIN tmp_vals AS t ON t.top = q.top
[/sql]
3. Если всё работает с приемлемой скоростью - ничего не трогать и не оптимизировать.
 

Renny

Новичок
Зачем создавать временные таблицы, это ведь доп нагрузка на сервер?
А делать выборку по частям, это интересная идея.
 
Сверху