У меня большой список строк ( 1500 адресов электронной почты, чтобы быть более точным ), и мне нужно найти фрагмент данных в очень большой таблице БД для каждой из строк (например, первичный ключ, mydataitem
).Как я могу сделать это эффективно?
Например, это слишком медленно ( среди других проблем ):
$stringArray = ('foo','bar','baz',..., 'for 1000s of items');
foreach($stringArray as $mystring) {
$res = mysql_query("select mydataitem,blah FROM users WHERE blah = '$mystring'");
$info=mysql_fetch_assoc($res);
...
}
Вещи Iхочу избежать:
- Я не хочу перебирать список и делать SELECT для каждого элемента.то есть 1500 запросов (, как в примере выше )
- Я не хочу читать всю таблицу в массив за один запрос и выполнять поиск в коде, потому что это заняло бы слишком много памяти,Таблица БД содержит более 100 тыс. Строк.
- Я не хочу создавать массивный запрос с 1499 операционными операциями, потому что запрос будет слишком большим.(например, "
select mydataitem FROM users WHERE blah = 'aaa' OR blah = 'bbb' OR ...
")
Примечание: я использую MySql v5.0.45
Обновление: Спасибо всем - почему-то я думал, что IN
был только для списков целочисленных идентификаторов - теперь я знаю лучше.