sql >> データベース >  >> RDS >> Mysql

MySQL動的クロスタブ

    列の数と名前は、クエリを準備するときに固定する必要があります。これがSQLの仕組みです。

    したがって、これを解決する方法には2つの選択肢があります。どちらの選択肢にも、アプリケーションコードの記述が含まれます:

    (1)個別の値を照会する way 次に、これらを使用してピボットクエリを作成するコードを記述し、SELECTリストに個別の値の数と同じ数の列を追加します。

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

    これで、新しいクエリを実行できます。このクエリには、個別のwayの数と同じ数の列があります。 値。

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

    (2)データを行ごとにクエリする データベースで構造化されているため、データを表示する前に列にピボットするコードを記述します。

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

    これで、ピボットクエリを実行した場合と同じように見える配列の配列ができましたが、実行した実際のSQLははるかに単純でした。クエリ結果を別の配列セットに後処理しました。




    1. インデックスの列の順序はどのくらい重要ですか?

    2. SQL Server 2008で画像データ型をvarcharに変換します

    3. クエリを使用してワードプレスの投稿からリンクを削除する

    4. DjangoAttributeError'float'オブジェクトに属性'split'がありません