Ho fatto del mio meglio per ripulire le cose, potrebbe non essere perfetto, ma dovrebbe essere sufficiente per dare una spintarella nella giusta direzione.
Sposta lookup
da classe a tabella DB
Mi sembra che saresti molto meglio servito qui spostando l'intento della lookup
classe in una tabella del database. Immagina qualcosa del genere:
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;
quindi inserisci tutti i tuoi dati dalla lookup
classe.
Utilizza JOINs &GROUP BY nella tua prima query SQL
È necessario determinare il numero di corridori in un determinato evento e classe. Puoi semplicemente UNIRTI a tbl_event_classes
e tbl_event_entries
quindi GROUP BY tbl_event_entries.event_id
per ottenere quei conteggi.
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
Ripulire il PHP
Ora il tuo codice PHP dovrebbe essere un po' più facile da seguire. Una query principale per ottenere gli eventi e le classi con il numero di corridori per evento per classe. Quindi, mentre esegui il ciclo su quel set di risultati, determina il numero di corridori per batteria.
È un po' approssimativo, ma sono sicuro che puoi sistemarlo da qui.
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>";
}