मैंने चीजों को साफ करने की पूरी कोशिश की, हो सकता है कि यह सही न हो, लेकिन सही दिशा में एक कुहनी के रूप में पर्याप्त होना चाहिए।
स्थानांतरित करें lookup
कक्षा से DB तालिका
मुझे ऐसा लगता है कि lookup
. के इरादे को आगे बढ़ाते हुए आपको यहां बेहतर सेवा दी जाएगी डेटाबेस तालिका में वर्ग। कुछ इस तरह की कल्पना करें:
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;
फिर lookup
. से अपना सारा डेटा डालें कक्षा।
अपनी पहली SQL क्वेरी में JOINs और GROUP BY का उपयोग करें
आपको किसी दिए गए ईवेंट और कक्षा में सवारों की संख्या निर्धारित करने की आवश्यकता है। आप बस tbl_event_classes
में शामिल हो सकते हैं और tbl_event_entries
फिर GROUP BY tbl_event_entries.event_id
उन गणनाओं को प्राप्त करने के लिए।
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
PHP को साफ करना
अब आपका PHP कोड अनुसरण करने में थोड़ा आसान होना चाहिए। प्रति वर्ग प्रति घटना सवारों की संख्या के साथ घटनाओं और कक्षाओं को प्राप्त करने के लिए एक मुख्य प्रश्न। फिर जब आप उस परिणाम सेट पर लूप करते हैं, तो प्रति हीट सवारों की संख्या निर्धारित करें।
यह थोड़ा मोटा है, लेकिन मुझे यकीन है कि आप इसे यहां से पॉलिश कर सकते हैं।
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>";
}