Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Hiển thị cột kích thước dưới dạng hàng cho từng sản phẩm màu trong bảng liên quan?

Không có lệnh PIVOT (MySQL bảng tổng hợp (chuyển đổi hàng thành cột) ) trong MySQL để truy vấn của bạn sẽ là tĩnh đối với kích thước. Đó là lý do tại sao tốt hơn là nên hoãn việc này trong đơn đăng ký.

Nghĩ rằng nếu bạn chỉ có tên miền hữu hạn và nhỏ cho cột kích thước thì bạn có thể sử dụng Truy vấn sau mà tôi đã đăng bên dưới:

mysql> SELECT 
    ->      c.color as color,
    ->      SUM(IF(s.size = 32, o.amount, 0)) as '32',
    ->      SUM(IF(s.size = 34, o.amount, 0)) as '34',
    ->      SUM(IF(s.size = 36, o.amount, 0)) as '36',
    ->      SUM(IF(s.size = 38, o.amount, 0)) as '38'
    ->  FROM `colors` c
    ->  INNER JOIN `order` o
    ->  INNER JOIN `sizes` s
    ->      WHERE c.`id` = o.`color` and s.`id` = o.`size`
    -> GROUP BY color 
    -> ;
+-------+------+------+------+------+
| color | 32   | 34   | 36   | 38   |
+-------+------+------+------+------+
| blue  |    3 |    4 |    2 |    0 |
| red   |    1 |    0 |    0 |    0 |
+-------+------+------+------+------+
2 rows in set (0.04 sec)

Như bạn có thể thấy trong điều kiện IF, tôi sử dụng giá trị của kích thước, đó là ý tôi muốn câu hỏi là tĩnh. Tôi giả định rằng tất cả các kích thước có thể có có thể là 32, 34, 36, 38.

Bản demo làm việc @ SQL Fiddle

Chỉnh sửa:Như tôi đang nói từ đầu Nếu giá trị kích thước không được xác định hoặc tên miền lớn thì tốt hơn là bạn nên hoãn công việc xoay trục trong tập lệnh máy chủ của mình (ví dụ:PHP), bạn vẫn có thể sử dụng truy vấn sau để xử lý trong tập lệnh:

SELECT 
     c.color as color,
     s.size,
     o.amount  --Edit: added 
 FROM `colors` c
 INNER JOIN `order` o
 INNER JOIN `sizes` s
     WHERE c.`id` = o.`color` and s.`id` = o.`size`

Xem cách nó hoạt động @ SQL fiddle .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách giám sát cơ sở dữ liệu MySQL / MariaDB bằng Netdata trên CentOS 7

  2. XÓA tất cả các chủ đề trùng lặp với một vài điều kiện

  3. Bắt đầu và dừng phiên bản mysql cục bộ từ bên trong ứng dụng

  4. Django Nhiều cơ sở dữ liệu Dự phòng cho Master nếu Slave bị lỗi

  5. Cập nhật colPos với thông lượng mở rộng typo3 9.0.1