SELECT taxi.id as id,name,
SUM(storico_pagamenti.importo) AS pagamentitotali,
SUM(CASE WHEN storico_pagamenti.data <= '$timestop' AND storico_pagamenti.data >= '$timestart' THEN storico_pagamenti.importo ELSE 0 END) AS pagamentimese,
SUM(storico_fatture.importo) AS fatturetotali,
SUM(CASE WHEN storico_fatture.data <= '$timestop' AND storico_fatture.data >= '$timestart' THEN storico_fatture.importo ELSE 0 END) AS fatturemese,
COUNT(giornifermi.registrazione) as giornifermitotali,
SUM(CASE WHEN giornifermi.data <= '$timestop' AND giornifermi.data >= '$timestart' THEN 1 ELSE 0 END) AS giornifermimese
FROM taxi
LEFT JOIN storico_pagamenti ON taxi.id = storico_pagamenti.id_taxi
LEFT JOIN storico_fatture ON storico_pagamenti.id_taxi=storico_fatture.id_taxi
LEFT JOIN giornifermi ON storico_fatture.id_taxi=giornifermi.id_taxi
WHERE taxi.categoria='cv'
GROUP BY taxi.id;
私の mysql スキルは、このクエリに対して十分ではありません...どこに問題があるのか 理解できません。動かない部分はこれ
SUM(CASE WHEN giornifermi.data <= '$timestop' AND giornifermi.data >= '$timestart' THEN 1
ELSE 0 END) AS giornifermimese
送信された2つの日付間の giornifermi.data の行数を私に与えることを期待していました
そしてこの他の部分:
COUNT(giornifermi.registrazione) as giornifermitotali
giornifermi.registrazione
列のすべての行の数を私に与えることを期待していました
これは結合のせいですか?それとも、クエリの 2 つの部分に問題がありますか?
EDIT--------------------------------------------- すべてのテーブルを関連付けました他のテーブルの変数 id_taxi と同じリファラー Taxi.id を「ON」に設定すると、値が取得されますが、間違っています。@Twelf の提案の後、「GROUP BY Taxi.id」にコメントして、select * を試してみました。私は今、結果が倍増するという問題を見てきました。例 giornifermi に 3 行ある場合は 6 行になり、storico_pagamenti に 2 行ある場合は、storico_pagamenti の行ごとに 3 行を再度コピーします。それを修正する方法はまったくわかりませんが、問題を知ることは何もないよりはましです
EDIT------------------------------------------ の後にサブクエリを追加することで修正されました左結合、giornifermi のテーブル全体を結合する代わりに、重複のないデータを修正するために新しいテーブルを作成しました
LEFT JOIN (SELECT
taxi.id as i,
COUNT(giornifermi.registrazione) as giornifermitotali,
SUM(CASE
WHEN giornifermi.data <= '$timestop' AND giornifermi.data >= '$timestart' THEN 1
ELSE 0
END) as giornifermimese
FROM taxi
LEFT JOIN giornifermi ON taxi.id=giornifermi.id_taxi
GROUP BY taxi.id
) AS NUOVATABELLA ON taxi.id=NUOVATABELLA.i