Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

perulangan dengan kueri dan tabel pencarian. mysql &php

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>";
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengubah kunci utama MySQL ketika ada batasan kunci asing

  2. Perbedaan waktu SQL dalam satu tabel

  3. Pindah ke mysqli, mysql_result

  4. Sekilas tentang Fungsi Numerik SQL Server

  5. Otomatiskan Penerapan MySQL atau Cluster Postgres Anda Dari Cadangan