物事を片付けるために最善を尽くしました。完璧ではないかもしれませんが、正しい方向への微調整としては十分なはずです。
ルックアップ
を移動します クラスからDBテーブルへ
lookup
の意図を動かして、ここでより良いサービスを受けられるように思えます。 データベーステーブルへのクラス。次のようなものを想像してみてください:
CREATE TABLE IF NOT EXISTS `tbl_lookup`(` lookup_id` int(11)NOT NULL AUTO_INCREMENT、 `rider_count` int NOT NULL、` heat_count` int NOT NULL、 `riders_in_heat_1` int NOT NULL、` riders_in_heat_2` int、)ENGINE =InnoDB DEFAULT CHARSET =utf8;
次に、 lookup
からすべてのデータを挿入します クラス。
最初のSQLクエリでJOINとGROUPBYを使用する
特定のイベントとクラスのライダーの数を決定する必要があります。 tbl_event_classes
に参加するだけです およびtbl_event_entries
次に、 GROUP BY tbl_event_entries.event_id
それらのカウントを取得します。
SELECT tec.class_id、tec.event_id、COUNT(tee.event_id)AS items_per_classFROM tbl_event_classes tecJOIN tbl_event_entries tee ON tee.event_id =tec.event_idWHERE tec.event_id =:event_idGROUP BY tee.event_id
PHPのクリーンアップ
これで、PHPコードを少しわかりやすくすることができます。クラスごとのイベントごとのライダーの数でイベントとクラスを取得するための1つの主要なクエリ。次に、その結果セットをループしながら、ヒートごとのライダーの数を決定します。
これは少しラフですが、ここから磨き上げることができると確信しています。
function getEntriesPerClass($ event_id){グローバル$ db; $ stmt =$ db-> prepare('SELECT tec.class_id、tec.event_id、COUNT(tee.event_id)ASentries_per_class'。'FROMtbl_event_classestec'。'JOINtbl_event_entries tee ON tee.event_id=tec.event_id'。 ' WHERE tec.event_id =:event_id'。'GROUP BY tee.event_id'); $ stmt-> bindValue(':event_id'、$ event_id); $ stmt-> execute(); return $ stmt-> fetchAll(PDO ::FETCH_ASSOC);} function getRidersInHeats($ class_id、$ event_id、$ riders_per_class){global $ db; $ stmt =$ db-> prepare('SELECT tl.riders_in_heat_1、tl.riders_in_heat_2'。'FROMtbl_lookup'。'WHERE class_id =:class_id AND event_id =:event_id AND rider_count =:entries'); $ stmt-> bindValue(':class_id'、$ class_id); $ stmt-> bindValue(':event_id'、$ event_id); $ stmt-> bindValue(':rider_count'、$ riders_per_class); $ stmt-> execute(); return $ stmt-> fetchAll(PDO ::FETCH_ASSOC);} $entriesPerClass =getEntriesPerClass($ _ GET ['event_id']); foreach($entriesPerClass as $ entry){$ riders =getRidersInHeats($ entry ['class_id']、 $ entry ['event_id']、$ entry ['entries_per_class']);エコー"クラス:"。 $row['class_id']。 ";"。 "ridercount:"。 $riders['rider_count']。 ";"。 "ヒート:"。 $riders['heat_count']。 "
"; echo "熱、からなる:
\ n"; echo "
";}- ヒート1:"。 $riders['riders_in_heat_1']。 "
"; $ ridersInHeat2 =$ riders ['riders_in_heat_2']; if($ ridersInHeat2> 0){echo "- Heat 2:"。 $riders['riders_in_heat_2']。 "
"; } echo "