2011-08-23 157 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