À 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:

  1. De Frappeur De L'Ordre De 1 À 9 — Loin De L'Équipe De Gamme
  2. De Frappeur De L'Ordre De 10 — Loin De L'Équipe Pichet
  3. De Frappeur De L'Ordre De 11 À 19 — La Maison De L'Équipe De Gamme
  4. 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:

  1. Si le joueur dans battingOrder 13 est active, la requête doit renvoyer le lecteur dans l'ordre des frappeurs 14.
  2. 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