Mysql
 sql >> Baza danych >  >> RDS >> Mysql

pętla z zapytaniem i tabelą przeglądową. mysql i php

Zrobiłem co w mojej mocy, aby posprzątać, może nie być idealny, ale powinien wystarczyć jako bodziec we właściwym kierunku.

Przenieś lookup klasa do tabeli DB

Wydaje mi się, że znacznie lepiej byłoby Ci tu służyć, przenosząc intencję lookup klasy do tabeli bazy danych. Wyobraź sobie coś takiego:

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;

następnie wstaw wszystkie dane z lookup klasa.

Użyj JOIN i GROUP BY w swoim pierwszym zapytaniu SQL

Musisz określić liczbę zawodników w danej imprezie i klasie. Możesz po prostu DOŁĄCZYĆ do tbl_event_classes i tbl_event_entries następnie GROUP BY tbl_event_entries.event_id aby uzyskać te liczby.

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

Czyszczenie PHP

Teraz twój kod PHP powinien być nieco łatwiejszy do naśladowania. Jedno główne zapytanie, aby uzyskać wydarzenia i klasy z liczbą zawodników na wydarzenie na klasę. Następnie, gdy przeglądasz ten zestaw wyników, określ liczbę zawodników na bieg.

To trochę szorstkie, ale jestem pewien, że możesz to doszlifować stąd.

Funkcja
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. MySQL:LAST_INSERT_ID() zwraca 0

  2. usuń wiersz za pomocą funkcji ajax i php

  3. MySQL od wiersza do kolumny

  4. Wiele obiektów SQL w PHP/MySQLi

  5. Elementy sum MySql w kolumnie