À l'aide de CAS, LORSQUE, ENSUITE, à la FIN dans une requête select avec MySQL
Je suis en train de travailler sur une balle de baseball des sites web connexes. J'ai une table avec un frappeur de gamme pour deux équipes de base-ball:
+----+----------+--------------+--------+
| id | playerId | battingOrder | active |
+----+----------+--------------+--------+
De frappeur de commande est un nombre entier compris entre 1 et 20. Cela correspond à la logique suivante:
- De Frappeur De L'Ordre De 1 À 9 — Loin De L'Équipe De Gamme
- De Frappeur De L'Ordre De 10 — Loin De L'Équipe Pichet
- De Frappeur De L'Ordre De 11 À 19 — La Maison De L'Équipe De Gamme
- De Frappeur De L'Ordre De 20 Équipe De La Maison De La Cruche
Le champ actif est un tinyint 0 ou 1, représentant la cruche sur la butte et de la pâte sur la plaque.
Fait connu: Il y aura toujours un pichet d'une équipe et d'un batteur de l'équipe adverse.
J'ai besoin d'écrire une requête qui renvoie une ligne pour un joueur de l'équipe qui correspond à la prochaine la pâte dans le battingOrder. (celui qui se produit après l'actif du frappeur battingOrder)
Exemple:
- Si le joueur dans battingOrder 13 est active, la requête doit renvoyer le lecteur dans l'ordre des frappeurs 14.
- Si le joueur dans battingOrder 19 est active, la requête doit renvoyer le lecteur dans l'ordre des frappeurs 11 (la gamme de boucles de retour pour le premier joueur de l'équipe).
Je n'ai jamais utilisé un CAS de requête avant, mais j'ai trouvé le suivant:
SELECT *
FROM lineups
WHERE battingOrder =
CASE (
SELECT battingOrder
FROM lineups
WHERE battingOrder > 10 AND active = 1
LIMIT 1
)
WHEN 11 THEN 12
WHEN 12 THEN 13
WHEN 13 THEN 14
WHEN 14 THEN 15
WHEN 15 THEN 16
WHEN 16 THEN 17
WHEN 17 THEN 18
WHEN 18 THEN 19
WHEN 19 THEN 11
END
LIMIT 1;
Il semble fonctionner, mais qu'en cas de bord et/ou les pièges j'ai marché dans? Est-ce efficace? Je suis particulièrement intéressé par une solution à mon problème qui n'utilise pas une requête imbriquée.
OriginalL'auteur Stephen | 2011-04-13
Vous devez vous connecter pour publier un commentaire.
En fait, vous pouvez le faire gérer à la fois la maison et loin comme si:
Oui. C'est une faute de frappe. Fixe.
Eh bien, j'ai utilisé votre requête textuelle sans résultat. J'ai un joueur au bâton de position de l'ordre de 19 comme actif, mais à la fois de vos requêtes renvoient pas de résultat.
Voulez-vous dire que vous avez un joueur à la BO de la position 18 et 19 qui sont à la fois active?
Bon, j'ai actuellement un joueur dans la base de données, dont battingOrder est de 19, et l'Actif est de 1. Ma requête renvoie le lecteur à la position 11 (correct) et que la requête renvoie un résultat null set.
OriginalL'auteur Thomas