Udělal jsem maximum, abych věci uklidil, nemusí to být dokonalé, ale jako postrčení správným směrem by to mělo stačit.
Přesuňte lookup
třídy do DB tabulky
Zdá se mi, že by vám zde mnohem lépe posloužilo přesunutí záměru lookup
třídy do databázové tabulky. Představte si něco takového:
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;
poté vložte všechna data z lookup
třída.
V prvním SQL dotazu použijte JOINs &GROUP BY
Musíte určit počet jezdců v daném podniku a třídě. Stačí se PŘIPOJIT k tbl_event_classes
a tbl_event_entries
pak GROUP BY tbl_event_entries.event_id
získat tyto počty.
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
Čištění PHP
Nyní by mělo být sledování vašeho PHP kódu o něco jednodušší. Jeden hlavní dotaz k získání událostí a tříd s počtem jezdců na událost a třídu. Poté, když budete opakovat tuto sadu výsledků, určete počet jezdců na jízdu.
Je to trochu drsné, ale jsem si jistý, že to odtud můžete vyleštit.
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>";
}