Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Tabel putar hanya mengembalikan 1 baris

Pertama:Anda telah memiliki dua atribut untuk product_id =1 yang sama, ubah tabel product_attributes dengan cara ini -

INSERT INTO `product_attributes` (`product_id`,`type`,`value`) VALUES
  (1,1,'blue'),
  (1,2,'shirt'),
  (2,1,'green'),
  (2,2,'pants');

Kemudian coba yang ini -

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(pat.name = ''', name, ''', pa.value, NULL)) AS ', name
    )
  ) INTO @sql
FROM product_attribute_types;

SET @sql = CONCAT('SELECT pa.product_id, ', @sql, ' FROM product_attributes pa INNER JOIN product_attribute_types pat ON pa.type = pat.id GROUP BY pa.product_id');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Hasil:

+------------+-------+-------+
| product_id | color | name  |
+------------+-------+-------+
|          1 | blue  | shirt |
|          2 | green | pants |
+------------+-------+-------+

Tambahkan filter WHERE jika diperlukan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Baca data Sesi PHP di node.js

  2. Algoritma yang mencari item terkait berdasarkan tag umum

  3. Pendekatan Ajax untuk mengisi dropdown dinamis kedua berdasarkan pemilihan di yang pertama

  4. Desain Database MySQL untuk daftar layanan

  5. Versi vs nomor Distribusi MySQL