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

cột động bằng cách sử dụng truy vấn bảng tổng hợp

Theo như tôi biết, bạn không thể thêm động các cột vào một câu lệnh SELECT. Những gì bạn đang yêu cầu là một cách trình bày dữ liệu và đó không phải là điều mà MySQL quan tâm. Bạn nên xử lý điều đó trong giao diện người dùng.

Tuy nhiên, bạn có thể gian lận bằng cách tạo các truy vấn trong mô hình của mình và thêm động các cột mới đó, bằng cách tự động chèn thêm MAX(case... vào chuỗi truy vấn. Tuy nhiên, đó không phải là một giải pháp hay.

Chỉnh sửa:

Vì vậy, tôi đoán bạn đang nói về giải pháp xấu xí. Về cơ bản, bạn nên tạo động chuỗi truy vấn của mình (mã giả):

$initialDay = 02/28/2012;
$lastDay = 03/28/2012;
$dayNumber = 1;
$sql = 'Select cadet_record.fname,cadet_record.lname,cadet_record.mname, student_id';
while ($initialDay <= $lastDay) {
    $sql .= ', MAX(case WHEN week = $initialDay then present end) as day' . $dayNumber;
    $initialDay = $initialDay + 1 day;
    $dayNumber++;
}
$sql .= ' From attendance blah blah...';

Sau đó, truy vấn của bạn sẽ giống như thế này cho các ngày từ 18/02/2012 đến 18/03/2012:

Select cadet_record.fname,cadet_record.lname,cadet_record.mname, student_id,
,MAX(case WHEN week = '02/18/2012' then present end) as day1
,MAX(case WHEN week = '02/19/2012' then present end) as day2
From attendance
LEFT JOIN cadet_record ON cadet_record.stud_no = attendance.student_id WHERE section = '$section' AND schoolyear = '$year' AND component = '$component' AND semester = '$semester'

GROUP BY student_id

Lưu ý rằng tôi đã thêm ngày thay vì tuần vì ví dụ của bạn hiển thị số ngày tăng lên, mặc dù tên cột là tuần



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xuất MySQL vào outfile:Các ký tự thoát CSV

  2. GROUP_CONCAT ORDER THEO

  3. Sử dụng kết quả từ một truy vấn trong cùng một truy vấn

  4. thông báo tin nhắn mới trực tiếp

  5. Truy vấn trả về quá ít hàng