[SQL allgemein] Group By

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [SQL allgemein] Group By

    Hi,
    verwende zum ersten mal "Group by" und versuche mich gerade daran,
    die User, die Online sind anzuzeigen und die, die Offline sind.
    Standard sieht so aus:
    PHP-Code:
      $sql mysql_query('SELECT userfriends.userfriendsfrienduserid,
                                 userfriends.userfriendsmyuserid,
                                 user.user************,
                                 user.userid,
                                 user.username,
                                 user.usertimestamp
                            FROM userfriends, user
                           WHERE userfriends.userfriendsfrienduserid = user.userid
                             AND userfriends.userfriendsmyuserid = '
    .$_SESSION['session_id'].'
                              OR userfriends.userfriendsmyuserid = user.userid
                             AND userfriends.userfriendsfrienduserid = '
    .$_SESSION['session_id']); 
    Dort werden Alle meine Freunde in meiner Freundesliste angezeigt.
    Nun sollen die, die Online sind zuerst angezeigt und werden und darüber steht dann "Online" und die anderen, die offline sind kommen unter den OnlineUsern. Darüber steht dann "Offline".
    Sollte so aus sehen:
    • Online:
    • Peter
    • Klaus
    • Offline:
    • Sabine
    • Beate
    • Linda
    • Susi


    Mein Ansatz:
    PHP-Code:
      $sql mysql_query('SELECT userfriends.userfriendsfrienduserid,
                                 userfriends.userfriendsmyuserid,
                                 user.user************,
                                 user.userid,
                                 user.username,
                                 user.usertimestamp
                            FROM userfriends, user
                           WHERE userfriends.userfriendsfrienduserid = user.userid
                             AND userfriends.userfriendsmyuserid = '
    .$_SESSION['session_id'].'
                              OR userfriends.userfriendsmyuserid = user.userid
                             AND userfriends.userfriendsfrienduserid = '
    .$_SESSION['session_id'].'
                        GROUP BY user.usertimestamp + 240 < '
    .time()); 
    Doch ich habe keine Ahnung wie ich erst die Online User anzeigen kann und danach schreiben kann: "Offline User:" und dann erst die Offline User.
    2 seperate Abfragen?

  • #2
    Hallo,

    ein GROUP BY wird dir da wohl kaum weiterhelfen. Das kannst du aber mit einem ORDER BY machen:

    PHP-Code:
    $sql mysql_query('SELECT userfriends.userfriendsfrienduserid,
                                 userfriends.userfriendsmyuserid,
                                 user.user************,
                                 user.userid,
                                 user.username,
                                 user.usertimestamp
                            FROM userfriends, user
                           WHERE userfriends.userfriendsfrienduserid = user.userid
                             AND userfriends.userfriendsmyuserid = '
    .$_SESSION['session_id'].'
                              OR userfriends.userfriendsmyuserid = user.userid
                             AND userfriends.userfriendsfrienduserid = '
    .$_SESSION['session_id'].'
                        ORDER BY if(user.usertimestamp + 240 > '
    .time().', 0,1) ASC'); 
    Das ORDER BY macht folgendes: es prüft ob der usertimestamp + 240 größer als der timestamp ist. Ist er das bekommt dieser Datensatz die Sortierkennziffer '0' ansonsten die '1'. Das wird dann aufsteigend geordnet (alle 0en zuerst) und so hast du dann die User vorne, die online sind.
    signed oder unsigned... das ist hier die Frage

    Kommentar


    • #3
      achja, mit der gleichen kontrollfunktion kannst du dir auch das online oder offline mitausgeben lassen:


      PHP-Code:
      $sql mysql_query('SELECT userfriends.userfriendsfrienduserid,
                                   userfriends.userfriendsmyuserid,
                                   user.user************,
                                   user.userid,
                                   user.username,
                                   user.usertimestamp,
                                   if(user.usertimestamp + 240 > '
      .time().', 'online', 'offline') AS status
                              FROM userfriends, user
                             WHERE userfriends.userfriendsfrienduserid = user.userid
                               AND userfriends.userfriendsmyuserid = '
      .$_SESSION['session_id'].'
                                OR userfriends.userfriendsmyuserid = user.userid
                               AND userfriends.userfriendsfrienduserid = '
      .$_SESSION['session_id'].'
                          ORDER BY if(user.usertimestamp + 240 > '
      .time().', 0,1) ASC'); 
      signed oder unsigned... das ist hier die Frage

      Kommentar


      • #4
        Super. Danke.
        Habs auch gemerkt das ORDER BY wohl besser ist
        Danke nochmal. Hat geklappt.

        Kommentar

        Lädt...
        X