"イベントリスト"ページには、今やその後に起こっているすべてのイベントがリストされています。CakePHP/MySQLのHABTM条件の多くに基づいて都市ごとの合計イベントを計算してください
ユーザは、選択した項目に一致するイベントのみを返すために照会する市区町村、イベントタイプ、イベントサブタイプなどを選択できます。
私はこの作業をうまく行っています。私は自分の入力に基づいてジョイン/コンディションなどを構築していますが、正しいイベントをページングなどに戻しています。
問題は今ある - 私は、ページの左側にある都市のリストを持っている、と(タイプ、サブtype..etcと同じ)、これらの都市でのイベントの数が欲しい - つまり:
New York (16)
Chicago (15)
Austin (8)
...
Sports (6)
- Baseball (2)
- Basketball (2)
- Football (0)
Outdoors (5)
...
それは私が使用していることを除いて大したことないだろう、私は必要なデータを取得するために参加するので、私はこれをしようとすると:
SELECT COUNT(`VenueCity`.`id`) + COUNT(RestaurantCity.id) AS total,
`VenueCity`.`name`, `VenueCity`.`id`, `VenueCity`.`slug`, `RestaurantCity`.`name`,
`RestaurantCity`.`id`, `RestaurantCity`.`slug` FROM `events` AS `Event`
INNER JOIN schedules AS `Schedule` ON (`Schedule`.`event_id` = `Event`.`id`)
INNER JOIN dates AS `Date` ON (`Date`.`schedule_id` = `Schedule`.`id`)
LEFT JOIN restaurants AS `Restaurant` ON (`Restaurant`.`id` = `Event`.`restaurant_id`) LEFT JOIN venues AS `Venue` ON (`Venue`.`id` = `Event`.`venue_id`)
LEFT JOIN cities AS `VenueCity` ON (`Venue`.`city_id` = `VenueCity`.`id`)
LEFT JOIN cities AS `RestaurantCity` ON (`Restaurant`.`city_id` = `RestaurantCity`.`id`)
WHERE `Event`.`name` IS NOT NULL
AND `Event`.`approval_status_id` = 1
AND `Date`.`start` >= '2011-07-12 16:45:39'
GROUP BY `VenueCity`.`id`
ORDER BY `total` DESC
それは(すなわち存在するすべての日付のカウントを返すです - 5つの日付がある10のイベントがある場合、カウントとして50を表示します。
この複雑なクエリAGAINを実行する必要はありません。すでにCakeのページネーションを2回実行した後です。そして、私がこの道を歩いていくと、すべてのタイプ、サブタイプ、サブタイプとも同じようにしなければならないと思います。
TLDR:
私はイベントSchedule->日付に基づいてイベントを取得する複雑な、MULT-結合問合せを持っています。私はまた、各都市、タイプ、サブタイプなどについて何件のイベントが起こっているか(同じクエリか新しいものか)を伝えることができるようにする必要があります。
私は交差しています指の答えは "ああ、それは簡単です、あなたはちょうど行うことができます__" - しかし、あなたが持っている助言/助けが必要です。
私はこれはどうなるのかに関しては困惑している - あなたが説明することができます任意のチャンス? – Dave
ありがとうございます、@Bill - 私はあなたに助けていただきありがとうございます、そして、将来の問題のためにそのサブクエリを念頭に置いておきます。これは、ちょっとした微調整が必要だったことを示しています。 – Dave