2012-10-20 33 views
0

這可能嗎?如果是這樣,我如何構建我的SELECT語句以實現這些結果?PHP MySQL在多個表上選擇查詢

我在一個PHP文件中創建一個HTML表格,該文件從MySQL數據庫中獲取各種行。這是我的查詢:

 // Define the query: 
    $query = "SELECT b.birdID, b.nameGeneral, b.nameSpecific, 
       b.genus, b.species, b.family, b.populationTrend, f.food, h.habitat 
       FROM bird_habitat AS bh 
       JOIN bird_food AS bf ON (bf.birdID_FK = bh.birdID_FK) 
       JOIN food AS f ON (f.foodID = bf.foodID_FK) 
       JOIN habitat AS h ON (h.habitatID = bh.habitatID_FK) 
       JOIN birds AS b ON (b.birdID = bh.birdID_FK AND b.birdID = bf.birdID_FK) 
       ORDER BY b.birdID ASC"; 

問題是與bird_habitat和bird_food表。每隻鳥可以有兩種不同的食物,它們可以吃,也可以住在2個不同的棲息地。例如,黑鳥可以吃種子和昆蟲,生活在沼澤和田野。當我運行SELECT語句時,我得到4個結果,每個鳥只有2個結果。使用黑鳥例子,我得到這些返回的行:

**Bird** **Food**  **Habitat** 
    1  Seeds   Marsh 
    1  Insects  Marsh 
    1  Seeds   Field 
    1  Insects  Field 

我想要得到的返回是這樣的:

**Bird #** **Food**  **Habitat** 
    1   Seeds   Marsh 
    1   Insects  Field 

所以基本上,我想回到獨特的食物,每個鳥可以吃,他們可以居住的獨特的棲息地沒有冗餘的領域重複。這可能嗎?如果是這樣,我如何構建我的SELECT語句以實現這些結果?

這裏,如果你想看看從SELECT查詢返回上面,這樣你可以得到什麼,我試圖做一個更好的主意時顯示的HTML表格的網頁的鏈接:

http://www.jasonkmccoy.com/AB-Tech/web250/Mod07/McCoy_edit_delete/index.php

正如你將會看到,如果你訪問頁面,那裏有2種食物和2個棲息地的鳥類,我需要刪除2行,以便只返回唯一的字段。

非常感謝您的幫助。這裏的人是最好的,我從你們所有人那裏學到了很多東西(我是初學者,但我正在學習:)傑森

回答

0
"SELECT b.birdID, b.nameGeneral, b.nameSpecific, 
b.genus, b.species, b.family, b.populationTrend, f.food, h.habitat 
FROM birds 
JOIN bird_food AS bf ON (bf.birdID_FK = bh.birdID_FK) 
JOIN food AS f ON (f.foodID = bf.foodID_FK) 
JOIN habitat AS h ON (h.habitatID = bh.habitatID_FK) 
JOIN bird_habitat AS bh ON (b.birdID = bh.birdID_FK) 
group by f.foodID 
ORDER BY b.birdID ASC"; 
+0

這有幫助,但它不會返回它應該如果你的結果回到http://www.jasonkmccoy.com/AB-Tech/web250/Mod07/McCoy_edit_delete/index.php頁面,你會發現一些鳥類的某些記錄根本沒有顯示出來(鳥類應該在每隻鳥至少一行2至31)。此外,這又爲鳥類帶來了獨特的食物,而不是獨特的棲息地。鳥2應該有2條記錄:1個應該有昆蟲和沼澤,另一個應該有種子和田地,現在兩行都有沼澤。 – HoppedUpDesigns

+0

感謝你的幫助阿倫,但仍然不起作用 – HoppedUpDesigns

+0

不,這仍然不起作用 – HoppedUpDesigns