Mysql
 sql >> база данни >  >> RDS >> Mysql

Въртящата се таблица връща само 1 ред

Първо:имали сте два атрибута за един и същи product_id =1, променете таблицата product_attributes по този начин -

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

Тогава опитайте този -

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;

Резултат:

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

Добавете филтър WHERE, ако е необходимо.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Symfony / PHP - Най-добрият начин за съхраняване на единична стойност

  2. промяна на формата на времето в mysql заявката ORDER BY

  3. вложено вмъкване в mysql за маркиране

  4. Проверка дали има данни в базата данни

  5. Планиране на събития и провеждане на събития през полунощ