Zrobiłem co w mojej mocy, aby posprzątać, może nie być idealny, ale powinien wystarczyć jako bodziec we właściwym kierunku.
Przenieś lookup
klasa do tabeli DB
Wydaje mi się, że znacznie lepiej byłoby Ci tu służyć, przenosząc intencję lookup
klasy do tabeli bazy danych. Wyobraź sobie coś takiego:
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;
następnie wstaw wszystkie dane z lookup
klasa.
Użyj JOIN i GROUP BY w swoim pierwszym zapytaniu SQL
Musisz określić liczbę zawodników w danej imprezie i klasie. Możesz po prostu DOŁĄCZYĆ do tbl_event_classes
i tbl_event_entries
następnie GROUP BY tbl_event_entries.event_id
aby uzyskać te liczby.
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
Czyszczenie PHP
Teraz twój kod PHP powinien być nieco łatwiejszy do naśladowania. Jedno główne zapytanie, aby uzyskać wydarzenia i klasy z liczbą zawodników na wydarzenie na klasę. Następnie, gdy przeglądasz ten zestaw wyników, określ liczbę zawodników na bieg.
To trochę szorstkie, ale jestem pewien, że możesz to doszlifować stąd.
Funkcjafunction 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>";
}