Melakukan yang terbaik untuk membersihkan semuanya, mungkin tidak sempurna, tetapi seharusnya cukup sebagai dorongan ke arah yang benar.
Pindahkan lookup
kelas ke tabel DB
Sepertinya Anda akan jauh lebih baik dilayani di sini memindahkan maksud lookup
kelas ke dalam tabel database. Bayangkan sesuatu seperti ini:
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;
lalu masukkan semua data Anda dari lookup
kelas.
Gunakan GABUNG &GROUP BY dalam kueri SQL pertama Anda
Anda perlu menentukan jumlah pengendara dalam acara dan kelas tertentu. Anda cukup GABUNG tbl_event_classes
dan tbl_event_entries
lalu GROUP BY tbl_event_entries.event_id
untuk mendapatkan jumlah tersebut.
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
Membersihkan PHP
Sekarang kode PHP Anda seharusnya sedikit lebih mudah diikuti. Satu kueri utama untuk mendapatkan acara dan kelas dengan jumlah pengendara per acara per kelas. Kemudian saat Anda mengulang set hasil tersebut, tentukan jumlah pengendara per seri.
Ini agak kasar, tapi saya yakin Anda bisa memperbaikinya dari sini.
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>";
}