2011-08-23 158 views
1

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

我在下面发布的代码是主要的重要部分,所以您可以希望了解我在问什么。

任何帮助将是伟大的,谢谢。

//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); 
} 

回答

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

所以,即使我三次执行mysql_fetch_array,我如何确保$ driver1的数据放入$ image1?因为我已经用你所说的查询尝试了它,但是它按照找到匹配的顺序检索数据。谢谢 – Ali

+0

@ user888697我刚刚编辑答案。 –

+0

非常感谢!工作的魅力,感谢您的时间! – Ali

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呼应在正确的占位符正确的图像。

+0

是的,这将工作,所以只需循环并将drivers_id匹配到$ driver1变量,等等。谢谢 :)。 – Ali

+0

差不多。请参阅@Vinay Pai的答案... – buritos

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"]; 
} 

您可以再与$图像打印出相应的图像[$驱动1]等

+0

所以我可以使用$ images [$ driver1]引用数组?它会回显为$ driver1变量检索的数据?这是如何工作的?对不起,成为一个害虫。 – Ali

+0

我保证我没有试图居高临下,但数组是PHP中的一个非常基本的概念(以及一般编程)。如果你不明白它们是如何工作的,你应该找到一个介绍性的教程,其中介绍了在试图开展一个真正的项目之前的事情,否则这将是一场艰苦的战斗。 –

+0

哈哈不,我知道数组是如何工作的,但是我认为你在什么地方试图告诉我不同​​的东西,你向我解释的东西是行不通的,因为值总是会改变的,所以当它们以$ images [4],$图片[7],$图片[5],我可以将它们放置在页面上,但是当有人在那里选择时会发生什么?它将不再是相同的,因为他们可以做出24个不同的选择,并且可以在任何时候重新进入那里选择。 – Ali