Есть ли более эффективный способ выразить этот запрос - PullRequest
0 голосов
/ 19 августа 2011

У меня есть запрос к моей базе данных mysql, но я просто хочу знать, есть ли более простой способ достижения чего-либо, вот мой код:

$sql="SELECT value 
  FROM drivers 
  WHERE drivers_id = '$driver1' OR drivers_id =  '$driver2' OR drivers_id = '$driver3'"; 

$result = mysql_query($sql);

$i = 1; 
while ($row = mysql_fetch_assoc($result)) { 
  ${'value'.$i} = $row['value']; 
  $i++; 
}

Вот как я хочу свой кодкороче, но проблема, с которой я столкнулся, заключается в том, что мне нужно знать, что, когда переменная $ driver1 находится в базе данных, извлеченные для нее данные помещаются в переменную value1, а извлеченная информация для $ driver2 помещается внутри$ значение2.Однако он получает данные из базы данных в порядке их совпадения.Я не хочу писать для этого 3 разных запроса, потому что уверен, что это можно сделать за один раз.

Ответы [ 2 ]

3 голосов
/ 19 августа 2011
$sql="SELECT drivers_id, value FROM drivers WHERE drivers_id IN ('$driver1','$driver2','$driver3')"; 

$result=mysql_query($sql);
while($row = mysql_fetch_assoc($result)) { 
  ${'value_for_'.$row['drivers_id']}=$row['value']; 
}

Boom.

Хотя лично, вместо переменных на лету, я бы использовал массив с идентификаторами в качестве ключей:

...
$resultArray = array();
while($row = mysql_fetch_assoc($result)) { 
  $resultArray[$row['drivers_id']]=$row['value']; 
}
0 голосов
/ 19 августа 2011

Если вы хотите изменить порядок результатов, вы можете добавить к запросу предложение order by:

$sql = "SELECT drivers_id, value FROM drivers WHERE drivers_id IN ('$driver1','$driver2','$driver3') ORDER BY drivers_id";
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...