是否有更有效的方式来表达此查询

时间:2011-08-19 17:04:54

标签: 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($result)) { 
  ${'value'.$i} = $row['value']; 
  $i++; 
}

这就是我想要的代码,因为它更短,但我遇到的问题是我需要知道在数据库中找到$ driver1变量的地方,为此检索的数据放在value1变量中,并且$ driver2的检索信息放在$ value2中。但是,它会按照匹配项的顺序从数据库中获取数据。我不想为此编写3个不同的查询,因为我相信它可以在一个中完成。

2 个答案:

答案 0 :(得分: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']; 
}

答案 1 :(得分:0)

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

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