Ben bir başarı sistemi uygulayan ediyorum. Ben oluşturmak için çalışıyorum "rozetleri biri" belirleyecektir:
- Bir kullanıcı en az bir kodlama meydan katıldı eğer
- Sonra 3 ardışık kodlama zorluklar katılmadı
- Sonra tekrar katılan başladı.
"Geri döneceğim" ;-) rozeti basitçe denir
The tables
users
==================
id fullname
1 Gary Green
challenge
==================================
id name start_date
1 challenge1 01-AUG-2010
2 challenge2 03-AUG-2010
3 challenge3 06-SEP-2010
4 challenge4 07-SEP-2010
5 challenge5 30-OCT-2010
6 challenge6 05-NOV-2010
entries
====================================================
id challengeid userid type code
1 1 1 1 -
2 2 1 1 -
3 6 1 1 -
4 6 1 2 -
Girişleri tabloda "tip" giriş tipi olmayan bir regex tabanlı giriş veya regex tabanlı bir ise ya ifade eder. Bir kullanıcı, bu nedenle meydan 6 yukarıdaki girdi, geçerli bir regex ve non-regex girişini hem de gönderebilirsiniz.
Example output
Bu isterim sorgunun tarzı çıkışı (bu durumda rozeti layık olmalıdır) olan:
(for userid 1)
Challenge 1 --> Joined in
Challenge 2 --> Joined in
Challenge 3 --> NULL
Challenge 4 --> NULL
Challenge 5 --> NULL
Challenge 6 --> Joined in
How?
İşte benim sorular
- Nedir bir sorguda bunu yapmanın en iyi yolu nedir?
- Bazı PHP başvurmadan bu dizi SELECT MySQL kullanabileceğiniz bir işlevi var mı?
The query so far
Kullanıcı 3 için de katılmadı eğer ben bir SOL DIŞ meydan tablo girişleri ve masa (SOL DIŞ kullanıcı katıldı değil zorlukları korumak için emin olmak için) katılmak için JOIN yapıyorum, sonra sıralama meydan start_date ile görmek veya daha fazla ardışık zorluklar.
SELECT challenge.id AS challenge_id, entries.id AS entry_id
FROM challenge_entries entries
LEFT OUTER JOIN challenge_details challenge
ON entries.challengeid = challenge.id
WHERE entries.userid = <user_id>
ORDER BY challenge.start_date
GROUP BY entries.challengeid
important edit: mantıklı bu rozeti için kriterler yukarıdaki örnekte çıkışı gibi ie katıldı zorlukları arasında sıkışmış 3 veya daha fazla ardışık zorluklar olması gerekir. Aksi halde ilk kez bir meydan okuma katılır herkes otomatik olarak rozet verilecektir. Kullanıcı bir süre için "uzak" zorluklar katılmaktan olduğu görülmesi gereken (> = 3)