1

同じテーブルの4つのフィールドをテーブルで2回結合しようとしています。以下のように、2つのLEFTJOINと2つのWHEREステートメントを使用してみました。現在、g2.address、g2.latitude、g2.longitude、g2.methodの結果が得られていません。ステートメントに何か問題があるのか​​、それともデータに関連するその他の明らかな間違いがあるのか​​わからない。どんな助けでもいただければ幸いです。

最初の試み:

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

2回目の試行

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
4

2 に答える 2

1

p.q3_6 と p.q4_2 がどのように入力されるかを正確に理解していないと、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, 
       ...

2 番目のクエリに注意してください。左結合には適していません。最初のものに固執します。

于 2012-09-16T20:15:33.757 に答える
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)ているのは、住所、緯度、経度、方法のエントリが重複する結果となったものです

于 2012-09-16T20:17:36.057 に答える