2012-01-14 51 views
2

我的頁面顯示圖像,我想顯示與當前圖像相關的上一張和下一張圖像。目前我運行相同的查詢3x並修改"where"語句=, >, <我該如何優化這個mysql/php查詢?

它的作品,但我覺得必須有一個更好的方式來做到這一點。

圖片ID不是1,2,3,4,5。可能是1,2,10,20,21等。但如果效率更高,我願意改變這一點。

mysql_select_db("database", $conPro); 
$currentid = mysql_real_escape_string($_GET['currentid']); 
$query ="SELECT * FROM database WHERE id ='".$currentid."' LIMIT 1 "; 
$result = mysql_query($query,$conPro) or die(mysql_error()); 
$affected_rows = mysql_num_rows($result);        
if ($affected_rows==1) 
    { 
     $row = mysql_fetch_array($result)or die ('error:' . mysql_error());  
     $current_id = $row['id']; 
     $current_header = $row['title']; 
     $current_description =$row['desc']; 
     $current_image = "http://".$row['img']; 
     $current_url = "http://".$row['id']."/".$db_title."/"; 
     $current_thumb = "http://".$row['cloud']; 
} 

mysql_select_db("database", $conPro); 
$query ="SELECT * FROM database WHERE id <'".$currentid."' ORDER BY id DESC LIMIT 1 "; 
$result = mysql_query($query,$conPro) or die(mysql_error()); 
$affected_rows = mysql_num_rows($result);        
if ($affected_rows==1) 
    { 
    $row = mysql_fetch_array($result)or die ('error:' . mysql_error()); 
     $previous_id = $row['id']; 
     $previous_header = $row['title']; 
     $previous_description =$row['desc']; 
     $previous_image = "http://".$row['img']; 
     $previous_url = "http://".$row['id']."/".$db_title."/"; 
     $previous_thumb = "http://".$row['cloud']; 
    }else{ 
     $previous_none = "true"; //no rows found 
    } 

mysql_select_db("database", $conPro); 
$query ="SELECT * FROM database WHERE id >'".$currentid."' ORDER BY id ASC LIMIT 1 "; 
$result = mysql_query($query,$conPro) or die(mysql_error()); 
$affected_rows = mysql_num_rows($result);        
if ($affected_rows==1) 
    { 
    $row = mysql_fetch_array($result)or die ('error:' . mysql_error()); 
     $next_id = $row['id']; 
     $next_header = $row['title']; 
     $next_description =$row['desc']; 
     $next_image = "http://".$row['img']; 
     $next_url = "http://".$row['id']."/".$db_title."/"; 
     $next_thumb = "http://".$row['cloud']; 
    }else{ 
     $next_none = "true"; //no rows found 
     } 
mysql_close($conPro); 

謝謝您的時間

回答

2

您不必每次都做select_db。一旦你選擇了一個數據庫,它就會保持選中狀態,直到你選擇了其他的數據。

你真的不能從做兩個單獨的查詢,以獲得一個/上一個影像脫身,但你可以通過使用一個聯合查詢假的吧:

(SELECT 'next' AS position, ... 
FROM yourtable 
WHERE (id > $currentid) 
ORDER BY id ASC 
LIMIT 1) 

UNION 

(SELECT 'prev' AS position, ... 
FROM yourtable 
WHERE (id < $currentid) 
ORDER BY id DESC 
LIMIT 1) 

這將返回兩行,含名爲「位置」的僞菲菲將允許您輕鬆識別哪一行是「下一個」記錄,哪一個是「前一個」記錄。請注意,括號是必需的,以便'order by'子句適用於單個查詢。如果沒有,mysql將採用聯合序列中最後一個查詢中的order by子句並將其應用於完整聯合結果。

+0

而不是做比運營商更少/更大的將有可能使用平等。我想@Shaune可以回答這個問題。如果是這樣,則**和**限制**的**順序可以被移除。另外,是否有yourtable.id索引? – 2012-01-14 09:13:07

0

您可以先獲得「前一個」一個WHERE id <'".$currentid."' ORDER BY id DESC,然後查詢兩個「上方」:SELECT * FROM database WHERE id >= '".$currentid."' ORDER BY id ASC然後它只需要兩個查詢而不是三個查詢。