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

Tạo kết hợp bảng / cột bằng cách sử dụng SQL Query hoặc Laravel SQL Query Builder

Điều này nên làm điều đó. Sẽ không hoạt động trong mysql 5.7 bởi vì CTE đệ quy không được bao gồm cho đến sau này, nhưng điều này sẽ cho phép bạn có một số thuộc tính và giá trị thuộc tính thay đổi trên mỗi group_id. Fiddle là đây .

with recursive allAtts as (
  /* Get our attribute list, and format it if we want; concat(a.title, ':', v.title) looks quite nice */
  SELECT 
    att.group_id,
    att.id,
    CONCAT(v.title) as attDesc,
    dense_rank() over (partition by att.group_id order by att.id) as attRank
FROM table_attributes att 
INNER JOIN table_attribute_values v 
    ON v.group_id = att.group_id 
    AND v.attribute_id = att.id 
 ),
 cte as (
 /* Recursively build our attribute list, assuming ranks are sequential and we properly linked our group_ids */
    select group_id, id, attDesc, attRank from allAtts WHERE attRank = 1
   
         union all 
   
    select 
        allAtts.group_id, 
        allAtts.id, 
        concat_ws('-', cte.attDesc, allAtts.attDesc) as attDesc,
        allAtts.attRank
   from cte 
   join allAtts ON allAtts.attRank = cte.attRank +1
      AND cte.group_id = allAtts.group_id
)
   
/* Our actual select statement, which RIGHT JOINs against the table_groups 
   so we don't lose entries w/o attributes */   
select 
    grp.id,
    concat_ws('-', d.day, qty.quantity, cte.attDesc) as combinations
from cte 
inner join (select group_id, max(attRank) as attID
            from cte
            group by group_id) m on cte.group_id = m.group_id and m.attID = cte.attrank
RIGHT JOIN table_groups grp ON grp.id = cte.group_id 
LEFT JOIN table_days d on grp.id = d.group_id
LEFT JOIN table_quantities qty on grp.id = qty.group_id;
            
            



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để bật máy khách MySQL tự động kết nối lại với MySQLdb?

  2. MySQL VARCHAR như Kiểu dữ liệu có độ dài ký tự MIN và MAX

  3. khác nhau giữa các bảng

  4. Bắt nguồn gốc

  5. Lỗi nghiêm trọng:Không thể mở và khóa các bảng đặc quyền:Bảng 'mysql.host' không tồn tại