Php 有没有更有效的方法来表达这个查询

Php 有没有更有效的方法来表达这个查询,php,sql,mysqli,Php,Sql,Mysqli,我有一个对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($re

我有一个对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信息放在$value2中。然而,它从数据库中获取数据的顺序是它遇到匹配项的顺序。我不想为此编写3个不同的查询,因为我确信它可以在一个查询中完成

$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']; 
}

虽然就我个人而言,我不使用动态变量,而是使用带有id的数组作为键:

...
$resultArray = array();
while($row = mysql_fetch_assoc($result)) { 
  $resultArray[$row['drivers_id']]=$row['value']; 
}

虽然就我个人而言,我不使用动态变量,而是使用带有id的数组作为键:

...
$resultArray = array();
while($row = mysql_fetch_assoc($result)) { 
  $resultArray[$row['drivers_id']]=$row['value']; 
}

如果要更改结果的顺序,可以在查询中添加
orderby
子句:

$sql = "SELECT drivers_id, value FROM drivers WHERE drivers_id IN ('$driver1','$driver2','$driver3') ORDER BY drivers_id";
...

如果要更改结果的顺序,可以在查询中添加
orderby
子句:

$sql = "SELECT drivers_id, value FROM drivers WHERE drivers_id IN ('$driver1','$driver2','$driver3') ORDER BY drivers_id";
...

听起来你需要以某种方式订购火柴。设置顺序的条件是什么?这并不能解决您的问题,但是您可以使用
从驱动程序id所在的驱动程序中选择值($driver1,$driver2,$driver3)
,而不是所有的
。听起来您需要以某种方式对匹配项进行排序。设置顺序的条件是什么?这并不能解决您的问题,但您可以使用
从驱动程序id所在的驱动程序中选择值($driver1,$driver2,$driver3)
,而不是所有的
。实际上,这对我不起作用:(,它仍然没有按照in子句中指定的顺序检索数据。它仍然在检索和放入变量,这取决于它首先匹配的是谁。它需要按照in子句的顺序,因为我也按照该顺序在网页中返回变量。它返回的顺序应该是无关的(如果您的代码设计得很好)
while
循环创建动态变量名,其中包括
$driver(1 | 2 | 3)
的值。也许您应该发布引用原始
$value(1 | 2 | 3)
变量的原始代码。此外,您还可以将
按驱动程序id排序
添加到SQL语句的末尾(假设
$driver(1 | 2 | 3)
的值是递增的)。实际上这对我不起作用:(,它仍然没有按照in子句中指定的顺序检索数据。它仍然在检索和放入变量,这取决于它首先匹配的是谁。它需要按照in子句的顺序,因为我也按照该顺序在网页中返回变量。它返回的顺序应该是无关的(如果您的代码设计得很好)
while
循环创建动态变量名,其中包括
$driver(1 | 2 | 3)
的值。也许您应该发布引用原始
$value(1 | 2 | 3)
变量的原始代码。此外,您还可以将
按驱动程序id排序
添加到SQL语句的末尾(假设
$driver(1 | 2 | 3)
的值是递增的)。