Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एक क्वेरी और लुकअप टेबल के साथ लूपिंग। mysql और php

मैंने चीजों को साफ करने की पूरी कोशिश की, हो सकता है कि यह सही न हो, लेकिन सही दिशा में एक कुहनी के रूप में पर्याप्त होना चाहिए।

स्थानांतरित करें 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>";
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक php फ़ाइल में mysqli कनेक्शन को कैसे परिभाषित करें और फिर इसे किसी अन्य फ़ाइल पर उपयोग करें?

  2. यदि मौजूद है तो तालिका से कॉलम कैसे छोड़ें

  3. MYSQL - प्रत्येक तालिका में पंक्तियों की संख्या गिनें

  4. PHP में एसक्यूएल पार्सर?

  5. विंडोज पर PostgreSQL इतना धीमा क्यों है?