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

Truy vấn bảng tổng hợp MySQL với các cột động cắt bớt giá trị khóa

Có một số vấn đề với mã của bạn - bằng cách giảm trọng lực:

  • bạn cần chọn from z_tmp_admin_system_settings , không phải from name
  • cột để nhóm theo được gọi là category , không phải subdomain
  • vì nguyên tắc của truy vấn là sử dụng tính năng tổng hợp, bạn cần một hàm tổng hợp cho các cột được tạo, chẳng hạn như MAX(); các phiên bản cũ của MySQL có thể chấp nhận được việc không sử dụng hàm tổng hợp trên các cột không được tổng hợp, nhưng đó không phải là điều nên làm quen với
  • một thực tiễn tốt là bao quanh tên của các cột bằng dấu gạch ngược, trong trường hợp một trong các tên xung đột với một từ dành riêng (đây không phải là trường hợp trong dữ liệu mẫu của bạn, nhưng nó có lẽ không toàn diện)
  • DISTINCT có thể không cần thiết, trừ khi bạn có name trùng lặp s cho mỗi danh mục (trong trường hợp này, vui lòng thêm lại vào mã bên dưới)
  • Ghi chú bên lề:IFNULL(..., NULL) là một điều không cần tham gia

Mã:

SET SESSION group_concat_max_len = 100000;
SET @sql = '';

SELECT GROUP_CONCAT(
    CONCAT('MAX(IF(z_tmp_admin_system_settings.name = ''', name, ''', value, NULL)) AS `', name, '`')
)
INTO @sql
FROM z_tmp_admin_system_settings;
SET @sql = CONCAT(
    'SELECT category, ', 
    @sql, 
    ' FROM z_tmp_admin_system_settings GROUP BY category'
);

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

Bản trình diễn trên DB Fiddle :

| category | 2fa | abc_processing_date | activate_new_approve_person | activate_new_schdule | additional_footer_for_person |
| -------- | --- | ------------------- | --------------------------- | -------------------- | ---------------------------- |
| acme     | 0   | today               | 1                           | 1                    |                              |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL kết hợp hai cột thành một cột

  2. Cách hiển thị ngày và giá trong cơ sở dữ liệu MySQL và hiển thị nó ở các định dạng khác nhau trong PHP

  3. cập nhật các cột có số thứ tự mysql

  4. Dự phòng cơ sở dữ liệu Mysql

  5. Đăng ký người dùng và xác minh email PHP và MySQL