ホームページ  >  に質問  >  本文

動的列MySQLピボットテーブルクエリ

<p>次のテーブルを使用して商品データを保存します。</p> <pre class="brush:php;toolbar:false;">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 | カラー | ブラック | ------------------ ------------ </pre> <p>次のクエリを使用して 2 つのテーブルからレコードを選択します</p> <pre class="brush:php;toolbar:false;">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 | ブラック | --------------- --------------- -------- ---------- -- - ----- </pre> <p>すべて問題ありません:) </p> <p>「追加」テーブルに動的にデータを入力しているので、クエリも動的であれば素晴らしいでしょう。こうすることで、新しいフィールド名とフィールド値を入力するたびにクエリを変更する必要がなくなります。 </p>
P粉262113569P粉262113569419日前411

全員に返信(2)返信します

  • P粉604848588

    P粉6048485882023-08-28 16:02:00

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

    リーリー

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

    返事
    0
  • P粉495955986

    P粉4959559862023-08-28 10:33:43

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

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

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

    リーリー

    参照デモ

    注: GROUP_CONCAT 関数の長さは 1024 文字に制限されています。ビューパラメータ group_concat_max_len

    返事
    0
  • キャンセル返事