2012-09-16 149 views
1

我想從表中連接兩個表中的4個字段兩次。我嘗試使用兩個LEFT JOIN和兩個WHERE語句,如下所示。目前我只是沒有得到任何結果爲g2.address,g2.latitude,g2.longitude,g2.method。不確定如果我在聲明中出現錯誤或者與我的數據相關的其他明顯錯誤。任何幫助,將不勝感激。LEFT JOIN兩次形成相同的表

1日嘗試:

SELECT p.q_id, p.first_name, p.surname, p.gender, p.age, p.race, 
     p.q2_7, p.q2_8_1, p.q2_8_2, p.q2_8_3, p.q2_8_4, p.q2_8_5, 
     p.q2_8_6, p.q2_8_7, p.q2_8_8, p.q2_9, p.q2_10, p.q2_11, 
     p.q2_11_1_1, p.q2_11_1_2, p.q2_11_1_3, p.q2_11_1_4, 
     p.q3_1, p.q3_2, p.q3_2_1, p.q3_3, p.q3_4, p.q3_5, 
     g1.address, g1.latitude, g1.longitude, g1.method, 
     p.q3_7, p.q3_8, p.q3_9, p.q3_10, p.q3_11_1, p.q3_11_2, 
     p.q3_11_3, p.q3_12, p.q3_13, p.q4_1, 
     g2.address, g2.latitude, g2.longitude, g2.method, 
     p.q4_3, p.q4_4, p.q4_5, p.q5_0_1, p.q5_0_2, p.q5_0_3, 
     p.q5_1, p.q5_2, p.q5_3 
    FROM people AS p 
    LEFT JOIN gmap_address_list AS g1 ON p.q3_6 = g1.id 
    LEFT JOIN gmap_address_list AS g2 ON p.q4_2 = g2.id 
GROUP BY p.q_id 

第二嘗試

SELECT p.q_id, p.first_name, p.surname, p.gender, p.age, p.race, 
     p.q2_7, p.q2_8_1, p.q2_8_2, p.q2_8_3, p.q2_8_4, p.q2_8_5, 
     p.q2_8_6, p.q2_8_7, p.q2_8_8, p.q2_9, p.q2_10, p.q2_11, 
     p.q2_11_1_1, p.q2_11_1_2, p.q2_11_1_3, p.q2_11_1_4, p.q3_1, 
     p.q3_2, p.q3_2_1, p.q3_3, p.q3_4, p.q3_5, 
     g1.address, g1.latitude, g1.longitude, g1.method, 
     p.q3_7, p.q3_8, p.q3_9, p.q3_10, p.q3_11_1, p.q3_11_2, 
     p.q3_11_3, p.q3_12, p.q3_13, p.q4_1, 
     g2.address, g2.latitude, g2.longitude, g2.method, 
     p.q4_3, p.q4_4, p.q4_5, p.q5_0_1, p.q5_0_2, p.q5_0_3, 
     p.q5_1, p.q5_2, p.q5_3 
    FROM people p, gmap_address_list g1, gmap_address_list g2 
WHERE p.q3_6 = g1.id AND p.q4_2 = g2.id 
ORDER BY p.q_id 
+0

第一查詢看起來syntaxically正確的重複條目,但「慷慨」組由MySQL的可能會給出奇怪的結果。沒有group by子句,你會得到結果嗎? –

+0

第一個查詢看起來很好。使用'SELECT COUNT(*)FROM people p JOIN gmap_address_list g ON p.q3_6 = g.id;'和另一個類似的查詢來檢查你的數據。如果你從兩者中得到零計數,那麼你只是沒有匹配的行。 –

+0

當我在cPanel中運行第一個查詢時,我得到了正確的結果。問題可能是我將結果保存到PHP中的數組中,並且我有數組單元格名稱重複地址,緯度,經度,q3_6和q4_2的方法。我將如何解決這個問題? – Rynardt

回答

1

不理解p.q3_6和p.q4_2究竟是如何得到填充,這是很難猜測爲什麼你的第二個LEFT JOIN可能不匹配任何東西。但是,在查詢的結果集中確實有一些重複的列名;這可能會阻礙在PHP中的數組加載的東西。您可以嘗試以下操作:

SELECT ... , 
     g1.address AS g1_address, g1.latitude AS g1_latitude, 
     g1.longitude AS g1_longitude, g1.method AS g1_method, 
     ... , 
     g2.address AS g2_address, g2.latitude AS g2_latitude, 
     g2.longitude AS g2_longitude, g2.method AS g2_method, 
     ... 

請注意,您的第二個查詢:對於左連接沒有好處。堅持第一個。

+0

謝謝。那是我最終想到的。在我看到這個之前發佈我的回答。 – Rynardt

0

得到它通過改變工作:

g2.address AS address_2, g2.latitude AS latitude_2, g2.longitude AS longitude_2, g2.method AS method_2 

我使用$row = mysql_fetch_array($result_people, MYSQL_ASSOC)這導致了對地址,經度,緯度,方法