Deuxième requête SELECT si le premier SELECT renvoie 0 lignes
Je suis en train d'accélérer l'exécution d'un script PHP et je suis actuellement en train de pousser certains PHP logique dans la base de données Mysql domaine de la chose. Est-il possible de faire une autre requête select si la première instruction Select ne renvoie aucune ligne, ou le nombre de zéro ?
En gardant à l'esprit que la première requête à exécuter en premier, et le second devrait seulement être activée que si le premier retourne un ensemble vide.
SELECT * FROM proxies WHERE (A='B') || SELECT * FROM proxies WHERE (A='C')
Pour ces 2 requêtes, j'ai ce code, mais il semble fonctionner à chaque requête, en deux fois (une fois pour les compter, et une fois de retour). Est-il une meilleure façon de le faire?
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
Vous êtes de compliquer à l'excès. Le
BTW: je crois que vous avez une faute de frappe dans la question. La dernière requête devrait prendre fin en
Vous aviez raison au sujet de la typo, thnx
Combien de lignes sont possibles pour la première SÉLECTIONNEZ - 1 ou plus?
Sur 0-6000
count(*)
sont un gaspillage. Simplement SELECT * FROM proxies WHERE A='B'
premier. Si vous obtenez zéro lignes de retour, puis le problème SELECT * FROM proxies WHERE (A='C')
.BTW: je crois que vous avez une faute de frappe dans la question. La dernière requête devrait prendre fin en
WHERE A='C'
, au lieu de WHERE A='B'
.Vous aviez raison au sujet de la typo, thnx
Combien de lignes sont possibles pour la première SÉLECTIONNEZ - 1 ou plus?
Sur 0-6000
OriginalL'auteur Evan | 2014-12-08
Vous devez vous connecter pour publier un commentaire.
Une option serait d'utiliser
UNION ALL
avecEXISTS
:Ce sera le retour de lignes de la
proxies
table oùA='B'
si elles existent. Cependant, s'ils n'existent pas, il va chercher ces lignes avecA='C'
.Je serais curieux de savoir si c'est effectivement plus rapide que de laisser php poignée de la logique. Je pense que cela pourrait en partie dépendre de la façon dont souvent Un='B' ne renvoie rien.
OriginalL'auteur sgeddes
MISE à jour
Regardez ma mise à JOUR
OriginalL'auteur Fabien TheSolution
Dans un cas général dans le cas de plusieurs valeurs pour
A
(disons, 'B', 'C', 'D', 'E', etc.) et vous souhaitez récupérer uniquement les lignes qui appartiennent à la valeur la plus basse qui existe, alors vous devez utiliser la requête suivante. Cela fonctionne aussi pour le cas particulier de l'exposition.Violon
OriginalL'auteur abl
Je pense que ce plus ou moins couvre ce que vous essayez de faire. Si vous avez besoin le nombre de lignes retourné juste de récupérer la valeur de mysqli->num_rows
Ne vous embêtez pas. Juste le faire en php. C'est plus simple et il ne fera pas pire.
OriginalL'auteur quid
D'une autre manière:
OriginalL'auteur i486