Memilih daripada Dua Jadual dengan Inner Join untuk Status Terkini
Apabila anda mempunyai dua jadual yang mengandungi data berkaitan, ia menjadi perlu untuk mendapatkan maklumat khusus daripada kedua-dua jadual. Dalam senario ini, anda mempunyai dua jadual: Perkhidmatan dan Status. Jadual Perkhidmatan menyimpan nama dan ID, manakala jadual Status menjejaki status dan cap masa yang dikaitkan dengan setiap perkhidmatan.
Untuk mendapatkan semula status terkini bagi setiap perkhidmatan, anda boleh menggunakan operasi gabungan dalaman. Matlamatnya adalah untuk menggabungkan baris daripada kedua-dua jadual berdasarkan lajur service_id, memastikan hanya maklumat status terkini dikembalikan.
Malangnya, pertanyaan yang anda nyatakan hanya mendapatkan semula status terkini untuk perkhidmatan dengan service_id = 2. Untuk menangani had ini dan mendapatkan status terkini untuk semua perkhidmatan, pertimbangkan pernyataan SQL yang diubah suai berikut:
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;
Subquery dalam gabungan dalaman terakhir menghapuskan semua kecuali status dengan cap masa terkini untuk setiap perkhidmatan. Dengan membandingkan service_id dan memadankan cap masa terkini, anda boleh menjamin bahawa pertanyaan mengembalikan hasil yang diingini:
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 Semua Perkhidmatan Menggunakan Inner Join?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!