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: 0
    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-2025 v.1.5 | design: diviXdesign & rainbowcolors