/ / MySQL - Comment interroger une valeur mais une valeur par défaut? - mysql

MySQL - Comment interroger une valeur mais une valeur par défaut? - mysql

J'ai posé la question à propos de plusieurs lignes dans un fil précédent, mais maintenant, j'ai besoin de connaître une seule ligne. Ceci est un exemple de requête:

SELECT * FROM table1 WHERE this = 5 LIMIT 1

Mais s'il n'y a pas de lignes trouvées, je le ferais pour trouver ensuite l'enregistrement avec une valeur différente:

SELECT * FROM table1 WHERE this = 1 LIMIT 1

Donc, ce que je veux, c’est de trouver une ligne dont la valeur est 5, si elle n’est pas trouvée, trouver par défaut une ligne de 1. Comment faire cela dans une seule requête? Une déclaration OU fonctionnerait-elle comme cela?

SELECT * FROM table1 WHERE this = 5 OR this = 1 LIMIT 1

Est-ce que l'ordre de l'instruction OR essaie de trouvertoute ligne avec la valeur de 5, si trouvé alors il va arrêter et retourner la ligne? SI non trouvé, cherchez 1 et retournez cette ligne? Si ce n'est pas le cas, comment puis-je faire cela avec une seule requête dans laquelle une seule valeur est recherchée, sinon la valeur par défaut est trouvée pour trouver une autre valeur?

Je pensais à cette requête:

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this ASC LIMIT 1

Cependant, cette requête renverrait toujours la valeur avec 1 si les deux valeurs étaient trouvées non? Alors j'ai essayé ceci:

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this DESC LIMIT 1

Mais cela renverrait toujours la valeur 5 si les deux lignes étaient trouvées correctes?

Réponses:

1 pour la réponse № 1

Votre question apparaît pour donner la priorité à la recherchepour 5 et seulement si non trouvé, alors cherchez 1. Par conséquent, votre deuxième solution correspond parfaitement à l'exigence. Il retournera la valeur 5 indépendamment du fait que 5 soit uniquement trouvé ou que les deux 5 et 1 existent.

la 2e option

SELECT * FROM table1 WHERE this IN(5,1) ORDER BY this DESC LIMIT 1

0 pour la réponse № 2

Essaye ça

SELECT *
FROM table1 tab
WHERE tab.this = IF((SELECT COUNT(*)
FROM table1
WHERE this = 5) > 0, 5, 1)

La requête à l'intérieur de l'IF vérifie le nombre.

Je ne suis pas sûr de la performance mais je pense que cela résout votre problème.