を与えるものではありません合計で左ジョインをすることは私の要求SQL - 複数がここで期待される結果に
SELECT j.* ,
c.name as client_name ,
s.name as supplier_name,
s.ID as supplier_id ,
mt.* ,
SUM(pb.require_followup) as nb_followup,
SUM(ws.worked_time) as hours_on_job,
SUM(iv.total) as total_price,
SUM(iv.hour_expected) as hours_planned,
j.ID as ID
FROM $wpdb->posts j
LEFT JOIN ".Job::$META_TABLE." mt ON mt.post_id = j.ID
LEFT JOIN ".Job::$LINK_TABLE_JOB_CONTACT." l1 ON l1.job_id = j.ID
LEFT JOIN ".Contact::$TABLE_NAME." c ON c.ID = l1.contact_id
LEFT JOIN ".Supplier::$TABLE_NAME." s ON s.ID = c.supplier_id
LEFT JOIN ".Problem::$TABLE_NAME." pb ON pb.job_id = j.ID
LEFT JOIN ".Worksheet::$TABLE_NAME." ws ON ws.job_id = j.ID
LEFT JOIN ".Invoice::$TABLE_NAME." iv ON iv.job_id = j.ID
WHERE j.post_status = 'publish'
AND j.post_type = 'job'
".implode(' ',$where_condition)."
GROUP BY j.ID
ORDER BY j.post_date DESC
問題は、SUMのためにその結果である私は、他のテーブルをJOINをLEFT時に間違っています。 例えば行53は、この要求は、最後の2 LEFTを除去することによって、正しい結果を単に返す代わり1
のnb_followupため105
を与えるJOIN:LEFT JOIN ".Worksheet::$TABLE_NAME." ws ON ws.job_id = j.ID
とだけLEFT JOIN ".Invoice::$TABLE_NAME." iv ON iv.job_id = j.ID
を除去 がLEFT JOIN ".Invoice::$TABLE_NAME." iv ON iv.job_id = j.ID
SELECT j.* ,
c.name as client_name ,
s.name as supplier_name,
s.ID as supplier_id ,
mt.* ,
SUM(pb.require_followup) as nb_followup,
j.ID as ID
FROM $wpdb->posts j
LEFT JOIN ".Job::$META_TABLE." mt ON mt.post_id = j.ID
LEFT JOIN ".Job::$LINK_TABLE_JOB_CONTACT." l1 ON l1.job_id = j.ID
LEFT JOIN ".Contact::$TABLE_NAME." c ON c.ID = l1.contact_id
LEFT JOIN ".Supplier::$TABLE_NAME." s ON s.ID = c.supplier_id
LEFT JOIN ".Problem::$TABLE_NAME." pb ON pb.job_id = j.ID
WHERE j.post_status = 'publish'
AND j.post_type = 'job'
".implode(' ',$where_condition)."
GROUP BY j.ID
ORDER BY j.post_date DESC
与えます
を再開するために53行の結果として
完全な要求が105
与える - >間違った15
を与える最後の結合を削除1
する必要があります - >間違った最後の2を与える加入削除1
する必要があります1
- >正しい
問題は、 'ID'カラムだけでグループ化していますが、集約関数には表示されない他の多くのカラムを選択しているということです。あなたの質問は論理的には明確に定義されていません。 –
Tim Biegeleisenとこれに同意すると、ロジックが正しく定義されていません。 – XepterX
私は理解していませんが、答えを出そうとすることはできますか? – pajouk