Andaikan anda perlu mendapatkan semula tetapan lalai daripada jadual "tetapan", tetapi juga perlu memasukkan tetapan peranan yang diganti. Walau bagaimanapun, pertanyaan sedia ada anda hanya mendapatkan semula tetapan yang menetapkan peranan secara eksplisit, tidak termasuk nilai lalai.
Untuk menyelesaikan masalah ini, kami boleh mengubah suai pertanyaan untuk mendapatkan hasil yang diingini. Daripada menapis melalui klausa WHERE (yang akan mengecualikan baris di mana gabungan kiri gagal), kami mengalihkan syarat ke cantuman itu sendiri:
SELECT `settings`.*, `character_settings`.`value` FROM `settings` LEFT JOIN `character_settings` ON `character_settings`.`setting_id` = `settings`.`id` AND `character_settings`.`character_id` = '1'
Dengan mengalihkan syarat ke dalam cantuman, kami memastikan bahawa cantuman kiri hanya akan berjaya jika tetapan khusus peranan hadir dan jika ia belum ditindih, tetapan lalai masih akan dikekalkan. Ini akan menghasilkan hasil yang diingini:
array( '0' => array('somekey' => 'keyname', 'value' => 'thevalue'), '1' => array('somekey2' => 'keyname2'), '2' => array('somekey3' => 'keyname3') )
Jika kunci 1 dan 2 mewakili nilai lalai, kunci 0 mengandungi nilai lalai yang dipertingkatkan dengan nilai khusus peranan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Dapatkan Tetapan Lalai dan Penggantian Khusus Karakter Menggunakan LEFT JOIN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!