ile seçili bir sorguda CASE, WHEN, THEN, END tuşlarını kullanma Beyzbol ile ilgili bir web sitesinde çalışıyorum. İki beyzbol takımları için bir vuruş sırası içeren bir tablo:MySQL
- Vuruş Sipariş 1-9 — Dışarıda:
+----+----------+--------------+--------+ | id | playerId | battingOrder | active | +----+----------+--------------+--------+
Vuruş düzeni 1 ve Bu, aşağıdaki mantık tekabül 20 arasında bir tam sayı olduğu Takım Sıralaması
- Batting Sipariş 10 — Deplasman Takım Sürahi
- Batting Sipariş 11-19 — Ev Sahibi Takım Sıralaması
- Vuruş Sipariş 20 — Ana Takım Sürahi
etkin alan tepenin üzerine sürahi ve plaka üzerinde meyilli temsil eden bir Tinyint, 0 ya da 1 'dir.
Bilinen Bilgiler: Her zaman bir takımdan bir aktif sürahi ve karşı takımdan bir aktif meyilli olacak.
Ben battingOrder içinde sonraki hamuru karşılık gelen bir ev sahibi takım oyuncu için bir satır döndüren bir sorgu yazmak gerekiyor.
Örnek (bu sonra etken Vurucunun battingOrder oluşur biri): battingOrder 13 oyuncu aktif ise, sorgu vuruş için oyuncu döndürmelidir
- 14.
- halinde battingOrder 19'daki oyuncu aktiftir, sorgu, oyuncuyu vuruş sırasına göre 11 (oyuncu için ilk oyuncuya geri döner) döndürmelidir.
Daha önce VAKA sorgusu hiç kullanmadıysanız, ama şu geldi:
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;
iş gibi görünüyor, ama ne kenar durumlarda ve/veya tuzaklar ı yürüdü içine? Bu verimli mi? Özellikle de iç içe geçmiş bir sorgu kullanmayan sorunumun çözümü ile ilgileniyorum.
Bu doğru görünmüyor. Neden kimlik sütununa bakıyorsunuz? BattingOrder sütunu olmalı. – Stephen
@Stephen - Evet. Bu bir yazım hatası. Sabit. – Thomas
Eh, sorgunuzu hiç sonuç vermeden kullandım. Sipariş pozisyonu 19'u aktif olarak harekette bir oyuncu var, ama her iki sorgunun da bir sonucu yok. – Stephen