Dapatkan nilai lalai untuk keadaan pertanyaan DALAM
Andaikan pertanyaan mendapatkan maklumat pengguna dan bilangan minit mereka berada dalam talian dalam julat tarikh yang ditentukan. Ia menggunakan pertanyaan IN untuk menapis pengguna berdasarkan ID mereka. Matlamatnya adalah untuk mengembalikan nilai lalai untuk ID tersebut yang tidak mempunyai sebarang rekod yang sepadan.
Pertanyaan ringkas:
<code class="language-sql">SELECT users.Name, users.ID, SUM(users.Minutes) AS MinutesOnline FROM UserTable LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID WHERE OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < '2016-01-31 00:00:00' AND users.ID IN (1,2,3,4,5);</code>
Pertanyaan yang diubah suai:
Untuk mencapai hasil yang diingini, alihkan syarat untuk Penggunaan Dalam Talian ke klausa FROM. Ini memastikan bahawa gabungan kiri berkelakuan seperti gabungan dalaman, menapis pengguna tanpa sebarang rekod sepadan dalam Penggunaan Dalam Talian.
<code class="language-sql">SELECT users.Name, users.ID, IFNULL(SUM(users.Minutes), 0) AS MinutesOnline FROM users LEFT JOIN OnlineUseage ON OnlineUseage.ID = users.ID AND OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date < '2016-01-31 00:00:00' WHERE users.ID IN (1,2,3,4,5);</code>
Pertanyaan kini akan mendapatkan semula pengguna dengan rekod yang sepadan dalam Penggunaan Dalam Talian dan pengguna tanpa rekod yang sepadan, sambil menetapkan MinutesOnline kepada nilai lalai 0 untuk pengguna tersebut tanpa rekod yang sepadan.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Rekod Hilang dalam Pertanyaan IN dengan Nilai Lalai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!