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

Tab chéo động MySQL

Số lượng và tên của các cột phải được cố định tại thời điểm bạn chuẩn bị truy vấn. Đó chỉ là cách SQL hoạt động.

Vì vậy, bạn có hai lựa chọn về cách giải quyết vấn đề này. Cả hai lựa chọn đều liên quan đến việc viết mã ứng dụng:

(1) Truy vấn các giá trị riêng biệt của way và sau đó viết mã để sử dụng chúng để tạo truy vấn tổng hợp, nối càng nhiều cột trong danh sách CHỌN bằng số giá trị riêng biệt.

foreach ($pdo->query("SELECT DISTINCT `way` FROM `MyTable`") as $row) {
  $way = (int) $row["way"];
  $way_array[] = "MAX(IF(`way`=$way, `time`)) AS way_$way";
}
$pivotsql = "SELECT stop, " . join(", ", $way_array) .
   "FROM `MyTable` GROUP BY `stop`";

Bây giờ bạn có thể chạy truy vấn mới và nó có bao nhiêu cột bằng số way riêng biệt giá trị.

$pivotstmt = $pdo->query($pivotsql);

(2) Truy vấn từng hàng dữ liệu vì nó được cấu trúc trong cơ sở dữ liệu của bạn và sau đó viết mã để xoay thành các cột trước khi bạn hiển thị dữ liệu.

$stoparray = array();
foreach ($pdo->query("SELECT * FROM `MyTable`") as $row) {
  $stopkey = $row["stop"];
  if (!array_key_exists($stopkey, $stoparray)) {
    $stoparray[$stopkey] = array("stop"=>$stopkey);
  }
  $waykey = "way_" . $row["way"];
  $stoparray[$stopkey][$waykey] = $row["time"];
}

Bây giờ bạn có một mảng các mảng trông giống như thể bạn đã chạy một truy vấn tổng hợp, nhưng SQL thực tế mà bạn chạy đơn giản hơn rất nhiều. Bạn đã xử lý hậu kỳ kết quả truy vấn thành một tập hợp mảng khác.




  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ỗi:SQLSTATE [42000]:Lỗi cú pháp hoặc vi phạm quyền truy cập với cakePHP

  2. Việc giới thiệu khóa ngoại vào MySQL có làm giảm hiệu suất không

  3. MYSQL Chèn nút gửi PHP

  4. Xác thực ứng dụng dành cho máy tính để bàn

  5. Làm thế nào để có được mức trung bình với thứ tựBy Desc trong Laravel 5