Php 有没有更有效的方法来表达这个查询
我有一个对mysql数据库的查询,但我只想知道是否有更简单的方法来实现某些东西,下面是我的代码: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
$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)
的值是递增的)。