MySQL ピボット テーブル クエリ: データ分析に動的列を使用する
P粉101708623
P粉101708623 2023-08-22 11:54:19
0
2
526

商品データを保存するために次のテーブルを使用しています。

mysql> SELECT * FROM product; --------------- --------------- ------ | ID | 名前 | 説明 | ストック | --------------- --------------- ------ | 1 | 製品 1 | 最初の製品 | 5 | | 2 | 製品 2 | 2 番目の製品 | 5 | --------------- --------------- ------ mysql> SELECT * FROM product_Additional; -------------------------------------- | ID | フィールド名 | フィールド値 | -------------------------------------- | 1 | サイズ | S | | 1 | 身長 | 103 | | 2 | サイズ | L | | 2 | 高さ | 13 | | 2 | カラー | ブラック | ------------------ ------------ 

次のクエリを使用して両方のテーブルからレコードを選択します:

mysql> SELECT p.id ,p.name 、p.説明 ,MAX(IF(pa.fieldname = 'size', pa.fieldvalue, NULL)) as `size` ,MAX(IF(pa.fieldname = 'height', pa.fieldvalue, NULL)) as `height` ,MAX(IF(pa.fieldname = 'color', pa.fieldvalue, NULL)) `color` として 製品pから LEFT JOIN product_Additional AS pa ON p.id = pa.id p.id によるグループ化 --------------- --------------- -------- ---------- -- ------ | ID | 名前 | 説明 | サイズ | 高さ | 色 | --------------- --------------- -------- ---------- -- ------ | 1 | 製品 1 | 最初の製品 | S | 103 | null | | 2 | product2 | 2 番目の製品 | L | 13 | ブラック | --------------- --------------- -------- ---------- -- - ----- 

すべてうまくいきます :)

「追加」テーブルに動的にデータを入力しているので、クエリも動的であれば良いでしょう。こうすることで、新しいフィールド名とフィールド値を入力するたびにクエリを変更する必要がなくなります。

P粉101708623
P粉101708623

全員に返信 (2)
P粉046387133

これを実現する方法は、受け入れられた回答とは少し異なります。このアプローチでは、デフォルトで 1024 文字の制限がある GROUP_CONCAT の使用を回避します。制限を変更しない限り、フィールドが多い場合には機能しません。

リーリー

デモを表示するにはここをクリックしてください

いいねを押す+0
    P粉768045522

    MySQL では、これを動的に行う唯一の方法は、準備されたステートメントを使用することです。これらについての良い記事は次のとおりです:

    動的ピボット テーブル (行を列に変換)

    コードは次のようになります:

    リーリー

    表示デモ

    注: GROUP_CONCAT 関数の文字制限は 1024 文字です。パラメータ group_concat_max_len

    を参照してください。
    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!