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

Dynamiczna karta krzyżowa MySQL

Liczba i nazwy kolumn muszą być ustalone podczas przygotowywania zapytania. Tak po prostu działa SQL.

Masz więc dwie możliwości rozwiązania tego problemu. Obie opcje obejmują pisanie kodu aplikacji:

(1) Zapytanie o odrębne wartości way a następnie napisz kod, który użyje ich do skonstruowania zapytania przestawnego, dołączając tyle kolumn na liście SELECT, ile jest odrębnych wartości.

foreach ($pdo->query("SELECT DISTINCT `way` FROM `MyTable`") as $row) {
  $way = (int) $row["way"];
  $way_array[] = "MAX(IF(`way`=$way, `time`)) AS way_$way";
}
$pivotsql = "SELECT stop, " . join(", ", $way_array) .
   "FROM `MyTable` GROUP BY `stop`";

Teraz możesz uruchomić nowe zapytanie, które ma tyle kolumn, ile jest różnych way wartości.

$pivotstmt = $pdo->query($pivotsql);

(2) Zapytanie o dane wiersz po wierszu zgodnie ze strukturą w bazie danych, a następnie napisz kod, który będzie przestawiany na kolumny przed wyświetleniem danych.

$stoparray = array();
foreach ($pdo->query("SELECT * FROM `MyTable`") as $row) {
  $stopkey = $row["stop"];
  if (!array_key_exists($stopkey, $stoparray)) {
    $stoparray[$stopkey] = array("stop"=>$stopkey);
  }
  $waykey = "way_" . $row["way"];
  $stoparray[$stopkey][$waykey] = $row["time"];
}

Teraz masz tablicę tablic, która wygląda tak samo, jak po uruchomieniu zapytania przestawnego, ale rzeczywisty kod SQL, który uruchomiłeś, był znacznie prostszy. Przetworzyłeś wynik zapytania do innego zestawu tablic.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tworzenie zagnieżdżonego JSON przy użyciu PHP MySQL

  2. walidacja i dodawanie danych do tabeli db

  3. Czy można zamawiać według łącznej liczby wielu stołów?

  4. Jak zapobiec duplikowaniu wstawek do tabeli

  5. Promień/najbliższe wyniki – Google Maps API