Melaksanakan Pertanyaan PILIH Kedua Bersyarat Berdasarkan Keputusan Pertama
Meningkatkan kecekapan skrip PHP boleh melibatkan memanfaatkan operasi pangkalan data. Satu teknik pengoptimuman melibatkan melaksanakan pertanyaan SELECT yang berbeza hanya apabila pertanyaan SELECT pertama tidak mengembalikan baris atau syarat tertentu dipenuhi.
Sebagai contoh, pertimbangkan pertanyaan berikut:
SELECT * FROM proxies WHERE (A='B') SELECT * FROM proxies WHERE (A='C')
Untuk bersyarat laksanakan pertanyaan kedua hanya jika pertanyaan pertama mengembalikan set kosong, pendekatan berikut boleh used:
IF (SELECT count(*) FROM proxies WHERE A='B')>0 THEN SELECT * FROM proxies WHERE A='B' ELSEIF (SELECT count(*) FROM proxies WHERE A='C')>0 THEN SELECT * FROM proxies WHERE A='C' END IF
Walau bagaimanapun, pendekatan ini melibatkan menjalankan setiap pertanyaan dua kali, sekali untuk mengira dan sekali untuk mendapatkan semula data. Penyelesaian yang lebih cekap ialah menggunakan UNION ALL dengan EXISTS:
SELECT * FROM proxies WHERE A='B' UNION ALL SELECT * FROM proxies WHERE A='C' AND NOT EXISTS ( SELECT 1 FROM proxies WHERE A='B' )
Pertanyaan ini mendapatkan semula baris daripada jadual proksi dengan A='B' jika ia wujud. Jika ia tidak wujud, ia mengambil baris dengan A='C'. Pendekatan ini mengurangkan bilangan panggilan pangkalan data dengan ketara, meningkatkan prestasi skrip.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan Pertanyaan SQL SELECT Kedua Dengan Cekap Hanya jika Yang Pertama Tidak Mengembalikan Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!