2010-08-10 199 views
0

我的查詢看起來像這樣的時刻:,MySQL的查詢兩個表

$result = mysql_query("SELECT * FROM promo JOIN items ON promo.id = items.promo_id WHERE promo.id='$promo_id'") or die('Error : ' . mysql_error()); 
    while($row = mysql_fetch_array($result)) 
    { 
    echo "<p>".$row['title']."</p>"; 
    echo "<p>".$row['description']."</p>"; 
    echo "<p>".$row['filename']."</p>"; 
    } 

我想有以下落得:促銷1

  • 標題

  • 這是促銷1說明,這不是很棒?!

  • filename_1.jpg

  • filename_2.jpg和然而,許多文件鏈接到這個促銷上市...

然而,根據上面的查詢,我得到:

  • 這是促銷1說明,這不是很好嗎?!

  • filename_1.jpg

  • 這是促銷1描述,是不是很棒?

  • filename_2.jpg

所以重複(我有點明白爲什麼),並在宣傳片的「標題」不扯了!任何人都可以推薦問題是否與我的JOIN或我的PHP?非常感謝您的幫助:)

+0

數據庫的外觀如何? – Codler 2010-08-10 12:11:47

+1

如果您選擇的是促銷ID,它只會找到與該ID相關的促銷,我的猜測是您有2個文件加入促銷1 – Luke 2010-08-10 12:12:15

+0

我們可以查看「促銷」和「商品」表的結構嗎? – Bobby 2010-08-10 12:12:19

回答

0

可能會出現描述和文件名,因爲這些名稱僅存在於其中一個表上,但標題位於兩個表上。

如果您使用查詢:

SELECT 
    * 
FROM 
    promo JOIN items ON promo.id = items.promo_id WHERE promo.id='$promo_id'" 

字段的名稱需要在路上table.field。預先指定您需要幫助您的字段的名稱並僅提取需要的數據而非全部表格,這非常有用。這使得該方法更快地檢索行並防止名稱出現問題。

您也可以指定一個列機智的句子「AS」 的名稱,例如:

SELECT 
    promo.title AS title, 
    promo.description AS description, 
    items.filename AS filename 
FROM 
    promo JOIN items ON promo.id = items.promo_id WHERE promo.id='$promo_id'" 

,你會得到一個表像(我設置好的就可以了虛數據):

title | description | filename 
------------------------------- 
title1|description1 | filename1 
title1|description1 | filename2 
title2|description2 | filename3 

提示:

  • 如果你得到了莫每個促銷比一個項目重複所有數據在每一行上重複。

    • 您需要查詢以顯示每個促銷的所有項目,而無需重複促銷數據,進行更復雜的查詢或添加一些代碼。
  • 如果您沒有任何促銷項目,該促銷不會出現在列表中。

    • 您需要使用list al promos和每個列表自己的項目來顯示沒有項目的promos或使用OUTER JOIN查詢。
0

不要在您的查詢中使用*****,而是指定您需要的列並應用適當的別名。