Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Melaksanakan Pertanyaan SQL SELECT Kedua Dengan Cekap Hanya jika Yang Pertama Tidak Mengembalikan Baris?

Bagaimanakah Saya Boleh Melaksanakan Pertanyaan SQL SELECT Kedua Dengan Cekap Hanya jika Yang Pertama Tidak Mengembalikan Baris?

Barbara Streisand
Barbara Streisandasal
2024-12-28 02:54:10740semak imbas

How Can I Efficiently Execute a Second SQL SELECT Query Only if the First Returns No Rows?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn