0
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
4

1 に答える 1