Ich habe mein Bestes getan, um die Dinge zu bereinigen, ist vielleicht nicht perfekt, sollte aber als Stupser in die richtige Richtung genügen.
Verschiebe lookup
Klasse in die DB-Tabelle
Es scheint mir, als wären Sie hier viel besser bedient, wenn Sie die Absicht der lookup
verschieben Klasse in eine Datenbanktabelle. Stellen Sie sich so etwas vor:
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;
fügen Sie dann alle Ihre Daten aus der lookup
ein Klasse.
Verwenden Sie JOINs &GROUP BY in Ihrer ersten SQL-Abfrage
Sie müssen die Anzahl der Fahrer in einem bestimmten Event und einer bestimmten Klasse bestimmen. Sie können einfach tbl_event_classes
BEITRETEN und tbl_event_entries
dann GROUP BY tbl_event_entries.event_id
um diese Zählungen zu erhalten.
SELECT tec.class_id, tec.event_id, COUNT(tee.event_id) AS entries_per_class
FROM tbl_event_classes tec
JOIN tbl_event_entries tee ON tee.event_id = tec.event_id
WHERE tec.event_id = :event_id
GROUP BY tee.event_id
Bereinigung von PHP
Jetzt sollte Ihr PHP-Code etwas einfacher zu verstehen sein. Eine Hauptabfrage, um die Veranstaltungen und Klassen mit der Anzahl der Fahrer pro Veranstaltung und Klasse abzurufen. Bestimmen Sie dann, während Sie diesen Ergebnissatz durchlaufen, die Anzahl der Fahrer pro Lauf.
Das ist ein wenig grob, aber ich bin sicher, dass Sie es von hier aus aufpolieren können.
function getEntriesPerClass($event_id) {
global $db;
$stmt = $db->prepare(
'SELECT tec.class_id, tec.event_id, COUNT(tee.event_id) AS entries_per_class ' .
'FROM tbl_event_classes tec ' .
'JOIN tbl_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 ' .
'FROM tbl_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']);
echo
"class : " . $row['class_id'] . "; " .
"ridercount: " . $riders['rider_count'] . "; " .
"heats : " . $riders['heat_count'] . "<br/>";
echo "Heats, consisting of :<br>\n<ul>";
echo "<li>Heat 1: " . $riders['riders_in_heat_1'] . "</li>";
$ridersInHeat2 = $riders['riders_in_heat_2'];
if($ridersInHeat2 > 0) {
echo "<li>Heat 2: " . $riders['riders_in_heat_2'] . "</li>";
}
echo "</ul>";
}