Поиск по нагрузкам идентификаторов в MySQL - PullRequest
0 голосов
/ 07 марта 2012

Есть ли способ поместить это в один или несколько запросов FAST?:

Я использую PDO :: MySQL

<?php
 $ids = array(1, 3, 4, 5, 6, 7, 23, 24, 26, 28); // example, this can hold up to 1000 unique id's
 $results = array();
 $stmt = $pdo->prepare("SELECT a, b, c FROM table WHERE id = ?");
 foreach($ids as $id) {
   $stmt->execute(array($id));
   $results[] = $stmt->fetch(PDO::FETCH_ASSOC);
 }
?>

Должен ли я действительно зацикливать идентификаторы, и это расширяет базовый запрос, чтобы он отображался как:

SELECT a, b, c, FROM table WHERE id = ? OR id = ? OR id = ? //etc

Ответы [ 3 ]

2 голосов
/ 07 марта 2012

Я думаю, вы ищете синтаксис

... WHERE ID in (1, 3, 4, 5, 6, 7, 23, 24, 26, 28)

1 голос
/ 07 марта 2012

Вы можете использовать оператор IN и implode, чтобы сделать это автоматически для вас.Это не быстрее, чем несколько OR с, но это делает ваш запрос короче, и это, безусловно, быстрее, чем несколько запросов, которые у вас сейчас.

<?php
 $ids = array(1, 3, 4, 5, 6, 7, 23, 24, 26, 28); // example, this can hold up to 1000 unique id's
 $results = array();
 $stmt = $pdo->prepare("SELECT a, b, c FROM table WHERE id IN (" . implode(',', $ids) . ")");
 $stmt->execute();
 $results[] = $stmt->fetch(PDO::FETCH_ASSOC);
?>
1 голос
/ 07 марта 2012

Нет, вам не нужно зацикливаться. Быстрое и грязное решение таково:

$ids = array(1, 3, 4, 5, 6, 7, 23, 24, 26, 28); // example, this can hold up to 1000 unique id's
$stmt = $pdo->prepare("SELECT a, b, c FROM table WHERE id IN (?)");
$stmt->execute(implode(',', $id));

Однако рекомендуемое решение - загрузить ваши идентификаторы в таблицу MySQL, а затем выполнить запрос с помощью JOIN.

...