MYSQL查询优化

时间:2011-08-23 00:16:31

标签: php mysql sql

我遇到的问题我将尽可能地描述它......用户选择三个选项并且图像出现在屏幕上,并且它们所做的选择被发送并存储在数据库中,PHP函数然后在下面查找选择的图像并将它们作为变量返回,以便在刷新页面后,它们所做的最新选择和与选择对应的图像仍然显示在占位符中,我想要的SQL代码合并到一个查询,但我需要它,所以在找到$ driver1的数据时,它被放入$ image1变量,$ driver2和$ image2相同,$ driver3到$ img3,所以我可以将它们返回到页面并回显正确图像在正确的占位符中。他们所做选择的图像需要出现在它们最初出现的占位符中。它现在可以正常工作,但我确信SQL查询可以缩短为一个?保存代码行。

我在下面发布的代码是主要的重要部分,因此您可以希望了解我的要求。

任何帮助都会很棒,谢谢。

//HTML CODE
<?php
list($img1, $img2, $img3) = checkteam();
?>

<img onclick="return removedriver1(this)" id="advert" src="images/delete.gif"  border="0"/>
    <img id="placeholder1" src="<?php echo "$img1";?>" alt="" />
<img onclick="return removedriver2(this)" id="advert src="images/delete.gif" border="0"/>
    <img id="placeholder2" src="<?php echo "$img2";?>" alt="" />
<img onclick="return removedriver3(this)" id="advert" src="images/delete.gif" border="0"/>
        <img id="placeholder3" src="<?php echo "$img3";?>" alt="" />


//PHP CODE
function checkteam(){

$sql="SELECT image FROM drivers WHERE drivers_id = '$driver1'"; 
                $result=mysql_query($sql);
                $row = mysql_fetch_array($result);

                $image1=$row[image];

$sql="SELECT image FROM drivers WHERE drivers_id = '$driver2'"; 
                $result=mysql_query($sql);
                $row = mysql_fetch_array($result);

                $image2=$row[image];

$sql="SELECT image FROM drivers WHERE drivers_id = '$driver3'"; 
                $result=mysql_query($sql);
                $row = mysql_fetch_array($result);

                $image3=$row[image];

return array ($image1, $image2, $image3);
}

3 个答案:

答案 0 :(得分:2)

在我看来,最好的方法是将它们全部放入一个关联数组中:

$sql = "SELECT drivers_id, image FROM drivers WHERE drivers_id IN ($driver1, $driver2, $driver3)";
$result = mysql_query($sql);
$images = array();
while (($row = mysql_fetch_assoc($result)) {
    $images[$row["drivers_id"]] = $row["image"];
}

然后,您可以使用$ images [$ driver1]等打印出适当的图像。

答案 1 :(得分:0)

您只能进行一次查询:

$sql = "SELECT drivers_id id, image FROM drivers WHERE drivers_id in ($driver1, $driver2, $driver3)";

当然,你需要myqsl_fetch_array三次。

while ($row = mysql_fetch){
    if ($driver1 == $row['id'])
     $image1 = $row['image'];
    else if ($driver2 == $row['id'])
     $image2 = $row['image'];
    else if ($driver3 == $row['id'])
     $image3 = $row['image'];
}

答案 2 :(得分:0)

select drivers_id, image from drivers where drivers_id in ($driver1, $driver2, $driver3)

select drivers_id, image from drivers where drivers_id = $driver1 or drivers_id =  $driver2 or drivers_id = $driver3

遍历结果并匹配drivers_id以在正确的占位符中回显正确的图像。