Maison > base de données > tutoriel mysql > Comment puis-je exécuter efficacement une deuxième requête SQL SELECT uniquement si la première ne renvoie aucune ligne ?

Comment puis-je exécuter efficacement une deuxième requête SQL SELECT uniquement si la première ne renvoie aucune ligne ?

Barbara Streisand
Libérer: 2024-12-28 02:54:10
original
713 Les gens l'ont consulté

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

Exécuter une seconde requête SELECT conditionnelle basée sur les résultats de la première

L'amélioration de l'efficacité des scripts PHP peut impliquer l'exploitation des opérations de base de données. Une technique d'optimisation consiste à exécuter une requête SELECT différente uniquement lorsque la première requête SELECT ne renvoie aucune ligne ou qu'une condition spécifique est remplie.

Par exemple, considérons les requêtes suivantes :

SELECT * FROM proxies WHERE (A='B')
SELECT * FROM proxies WHERE (A='C')
Copier après la connexion

Pour conditionnellement exécutez la deuxième requête uniquement si la première requête renvoie un ensemble vide, l'approche suivante peut être utilisée :

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
Copier après la connexion

Cependant, cette approche implique d'exécuter chaque requête deux fois, une fois pour comptage et une fois pour récupérer les données. Une solution plus efficace consiste à utiliser UNION ALL avec 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'
)
Copier après la connexion

Cette requête récupère les lignes de la table des proxys où A='B' si elles existent. S'ils n'existent pas, il récupère les lignes avec A='C'. Cette approche réduit considérablement le nombre d'appels à la base de données, améliorant ainsi les performances des scripts.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal