Memilih daripada Dua Jadual dengan Inner Join dan LIMIT
Untuk mendapatkan semula status terkini bagi setiap perkhidmatan dalam dua jadual, Perkhidmatan dan Status, satu cantuman dalaman boleh digunakan.
Untuk rujukan, jadual sedia ada ialah:
Perkhidmatan:
Lajur:
Status:
Lajur:
Hasil yang diingini ialah status terkini untuk setiap perkhidmatan, seperti yang dilihat di bawah:
id | name | status | timestamp |
---|---|---|---|
1 | Test1 | OK | October, 15 2015 09:08:07 |
2 | Test2 | OK | October, 15 2015 10:15:23 |
Pernyataan sebelum ini mempunyai had dalam mendapatkan yang terkini statuses:
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 memastikan pemilihan status terkini yang betul, subquery diperlukan untuk mengenal pasti cap masa maksimum bagi setiap perkhidmatan:
SELECT service_id, MAX(timestamp) AS MaxDate FROM status GROUP BY service_id
Subquery ini mencipta jadual baharu dengan dua lajur: service_id dan MaxDate. Lajur MaxDate mewakili cap masa terkini untuk setiap perkhidmatan.
Menggunakan subkueri ini, pertanyaan utama boleh diubah suai untuk menyertai jadual Perkhidmatan dengan jadual cap masa maksimum:
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;
Dengan menyertai pada kedua-dua service_id dan MaxDate, hanya status terkini untuk setiap perkhidmatan akan dipaparkan, memastikan hasil yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Status Terkini untuk Setiap Perkhidmatan Menggunakan Inner Join dan LIMIT?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!