Box と Schedule という、遠い関係にある 2 つの mySQL テーブルがあります。
テーブルは、他の多くのテーブル結合によってのみ関連付けられます。
ボックスにはサブスクリプション ID があり、サブスクリプションには boxContent ID があり、boxContent にはスケジュール ID があります。
多くのボックスには 1 つのサブスクリプションがあります 1 つのサブスクリプションには多くの boxContents があります 多くの boxContents には 1 つのスケジュールがあります
箱に添付されているスケジュールの詳細をすべて取得し、箱の配達日別にグループ化する必要があります。
私が抱えている問題は、サブスクリプションとボックスコンテンツのデータが無効な結果で結果を埋めないように、それらをグループ化または結合する方法がわからないことです。
例えば:
SELECT
Box.expected_delivery_date, count(Box.id) num_boxes
FROM
Box
WHERE
Box.state = 3 AND Box.status = 2
GROUP BY Box.expected_delivery_date;
探す必要がある正しい数のボックスを返します。
2010-10-01 - 2
2010-10-07 - 4
ただし、2 つをリンクする必要があるテーブルを含めると、すべてのデータが結果を混乱させます。
SELECT
Box.expected_delivery_date, count(Box.id) num_boxes
FROM
Box
JOIN
Subscription ON Box.subscription_id = Subscription.id
JOIN
BoxContent ON Subscription.id = BoxContent.subscription_id
JOIN
Schedule ON Schedule.id = BoxContent.schedule_id
WHERE
Box.state = 3 AND Box.status = 2
GROUP BY Box.expected_delivery_date;
戻り値:
2010-10-01 - 10
2010-10-07 - 17
これを行う簡単な方法があると確信していますが、SQLが得意ではありません。