たぶん、誰かが私が一日中戦ってきたという声明に光を当てることができます:)
私は3つのテーブルを持っています
ホリデー
holidayID | userID | dateFrom | dateTo
1 | 1 | 2012-01-01 | 2012-01-01
2 | 1 | 2012-01-15 | 2012-01-20
状態
statusID | holidayID | statusText
1 | 1 | accepted
2 | 2 | declined
ユーザー設定
id | userID | HolidaysAllowed
1 | 1 | 20
私がやろうとしているのは、次の結果を得ることです
結果
HolidaysAllowed | HolidaysLeft (Allowed - Taken) | HolidaysTaken (Sum of Holidays)
20 | 19 | 1
ステータスを明記しなければ、3 つの列すべてを取得できます。取得した最も近いものを次に示します。
SELECT
IFNULL(SUM( IF( h.dateTo = h.dateFrom, 1, DATEDIFF( h.dateTo, h.dateFrom ) ) ), 0) AS holidaysTaken,
IFNULL(us.HolidaysAllowed - ( SUM( IF( h.DateTo = h.DateFrom, 1, DATEDIFF( h.DateTo, h.dateFrom ) ) ) ), 0) AS holidaysLeftover,
us.HolidaysAllowed
FROM userSettings us
LEFT JOIN holiday h
ON h.userID = 1
JOIN status s
ON s.holidayID = h.holidayID AND s.statusID = 1
WHERE
us.userID = 1
GROUP BY h.userID;
主な問題は、statusID = 2 の休日がない場合、結果の列 1 と 2 は 0 (正しい) ですが、列 3 (HolidaysAllowed) は NULL (常にテーブル UserSettings から値を返す必要があるため正しくない) です。 . 上記のクエリは、正しいステータスのレコード (休日) が少なくとも 1 つある場合にのみ正しい応答を返します...何が間違っていますか? :)
それは私を夢中にさせるだけです:)助けてくれてありがとう!とても有難い!
アップデート
コメントしてくださった皆様、ありがとうございます... 予想される結果は次のとおりです。ステータスが 1 (つまり、承認済み) の休日をすべて取得し、許可された休日の統計と比較して休日の統計を計算します。いえ
通算20日、休日1日受付=残り19日
再度、感謝します