2012-03-27 116 views
0

我有一個腳本,我正在努力檢索基於標題的第一個字母的結果。我有鏈接A-Z,您可以點擊它,它會顯示以該字母開頭的所有結果。我的問題是我想顯示table1的數據,並顯示該結果的圖像,如果不存在,如果不是,那麼它只會顯示table1的結果數據。如何顯示只有一個結果

我的腳本似乎工作正常,但如果表2中存在多於一個圖像與表1中的link_id匹配,那麼它將多次顯示結果。 我試圖找出一種方法來只從table2拉1圖像,即使更多的存在等於table1中的link_id。我在表2中創建了一個名爲default_image的列,並且每個具有多個圖像的link_id都將其中一個圖像設置爲1,並將所有其他圖像設置爲0.

如何顯示只有默認圖像的結果或根本沒有圖像「意味着如果table2中沒有可用的圖像鏈接到table1中的link_id,則表1中的結果文本仍將顯示」。

這是我在做什麼。

$letter = $_GET['letter']; 
$sql = " 
select 
    s.link_id, 
    s.title, 
    i.media_id, 
    i.link_id, 
    i.media_link, 
    i.title 
from table1 as s 
LEFT JOIN images as i on (i.link_id = s.link_id) 
where s.title like '$letter%' 
and s.def = i.title"; 

$result = mysql_query($sql) or die($CONF['debug']?("ERROR: mysql query failed: ".mysql_error()):"ERROR: Please try later"); 
while($row = mysql_fetch_array($result)){ 
    $letter = $_GET['letter']; 
    //echoing all data here 
} 

只是想盡可能清楚。我基本上試圖查詢數據庫,並顯示table1數據和table2「圖像」數據,如果有任何圖像存在,如果不只是顯示table1數據,並確保我只顯示默認圖像,如果存在多個圖像。

任何人有什麼想法做什麼? 謝謝。編輯: 使用GROUP BY修復。謝謝誰曾建議並刪除他們的評論。我完全忘了團隊。

+3

您的腳本對SQL注入攻擊開放。如果沒有首先驗證它是否安全使用,請勿使用$ _GET或$ _POST中的數據。使用mysql_real_escape_string或瞭解準備好的語句。 – GordonM 2012-03-27 07:01:11

+0

謝謝他,但我知道這一點。我只是想讓它在本地主機上運行。如果我將它用於生產,我將確保對所有內容進行驗證。 – chris 2012-03-27 07:47:19

回答

0

使用此查詢:

select 
s.link_id, 
s.title, 
i.media_id, 
i.link_id, 
i.media_link, 
i.title 
from table1 as s 
LEFT JOIN images as i on (i.link_id = s.link_id) 
where s.title like '$letter%' 
and s.def = i.title 
order by i.default_image DESC 
limit 1 

只要你需要排序default_image場下降(因此非空行會在頂部)和1限制你的查詢,所以你只需要第一行(如果有不止一個)。