Data Status Terkini dengan Sertaan dan Had Dalam
Cabaran ini melibatkan mendapatkan semula status terkini untuk setiap perkhidmatan daripada dua jadual: Perkhidmatan dan Status. Jadual Perkhidmatan mengandungi maklumat perkhidmatan, manakala jadual Status menyimpan kemas kini status dengan rekod cap masa.
Untuk mencapai ini, cantuman dalaman boleh digunakan untuk menggabungkan jadual berdasarkan lajur service_id. Walau bagaimanapun, cabaran timbul apabila memilih status terkini untuk setiap perkhidmatan. Pernyataan berikut hanya mendapatkan status terkini untuk perkhidmatan terakhir:
SELECT ser.id, ser.name, a.status, a.timestamp from Service ser inner join (select * from status order by Status.timestamp DESC limit 1) as a on a.service_id = ser.id
Untuk mendapatkan semula status terkini bagi setiap perkhidmatan, pertanyaan bersarang diperlukan:
SELECT ser.id, ser.name, s.status, s.timestamp FROM Service ser INNER JOIN status as s ON s.service_id = ser.id INNER JOIN ( SELECT service_id, MAX(timestamp) AS MaxDate FROM status GROUP BY service_id ) AS a ON a.service_id = s.service_id AND a.MaxDate = s.timestamp;
Pertanyaan bersarang mendapatkan semula cap masa maksimum untuk setiap perkhidmatan, yang mewakili status terkini untuk perkhidmatan tersebut. Hasilnya kemudian digabungkan dengan pertanyaan utama untuk memaparkan data status terkini bagi setiap perkhidmatan.
Menggunakan pendekatan ini, output yang diingini dicapai:
id | name | status | timestamp |
---|---|---|---|
1 | Test1 | OK | October, 15 2015 09:08:07 |
2 | Test2 | OK | October, 15 2015 10:15:23 |
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Status Terkini untuk Setiap Perkhidmatan Menggunakan SQL Joins?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!