Loading:


MySQL sortowanie losowe według 3 kolumn klauzula WHERE CASE WHEN

Kurs opisuje zagadnienie dość skomplikowanego sortowania wyników z bazy danych.

Nasze zadanie polega na wyÅ›wietleniu 4 osób o grupie gwiazda na stronie gÅ‚ównej wedÅ‚ug takiej zasady:
- najpierw losowo osoby online
- nastÄ™pnie osoby które zadeklarowaÅ‚y że bÄ™dÄ… online ale nie później niż za 12 godzin
- cała reszta losowo


Nasze tabele:

użytkownicy: id, username, grupa

online: username, data

bede_za: username, data


RozwiÄ…zanie:

a.id, a.username, a.grupa,
c.DATA AS online,
e.DATA AS za, e.DATA IS NULL AS isnull
FROM
star_users AS a LEFT JOIN star_online AS c ON b.username=c.username
LEFT JOIN star_bede_online AS e ON b.username=e.username
WHERE a.grupa='star' AND
NOW() + interval 12 hour > CASE WHEN e.DATA IS NULL THEN '0000-00-00 00:00:00' ELSE e.DATA END
GROUP BY (a.username) ORDER BY online DESC, isnull ASC, za ASC, RAND() LIMIT 4

 

Co się wydarzyło?

1. a.id, a.username, a.grupa - to nasze dane usera

2. c.DATA AS online - przypisanie wartości c.data do zmiennej online łatwijszej dla oka

3. e.DATA AS za - przypisanie wartości e.data do zmiennej za łatwijszej dla oka

4. e.DATA IS NULL AS isnull - jeÅ›li wartość e.data jest NULL to przypisujemy zmiennej isnull wartosc 1, po co? bo potem jak bÄ™dziemy robić order by ASC to nule weszÅ‚y by nam na samÄ… góre wyników

5. potem mamy left join

6. NOW() + interval 12 hour > CASE WHEN e.DATA IS NULL THEN '0000-00-00 00:00:00' ELSE e.DATA END - to użyte w klauzuli where wyodrÄ™bni nam osoby który zapowiedziaÅ‚y ze bÄ™dÄ… online za do 12h

7. GROUP BY (a.username)- grupowanie wyników po loginie aby sie wartoÅ›ci nie powtarzaÅ‚y

8. ORDER BY online DESC, isnull ASC, za ASC, RAND() - w tym momencie wykonujemy ORDER BY wedÅ‚ug naszy kryteriów zaÅ‚ożonych w zleceniu czyli najpierw ludzie online, potem ci bedÄ™ online za i na koÅ„cu caÅ‚a reszta



Napisz Artyku³

Listing

niema




Dodano przez: igor
Ranga: Administrator serwisu Punktów: 28716
Komentarze użytkowników
    • Tre¶æ komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2021 v.1.5 | design: diviXdesign & rainbowcolors