Hilfe bei WIO (Aus "sessionara" auslesen)

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

  • Hilfe bei WIO (Aus "sessionara" auslesen)

    Ich benutze das Script "Sessionara 1.7-r1" für meine Seite.

    Jetzt würde ich gerne eine WIO (Who is online) machen.
    Also die Anzahl der Onlineuser ist ja leicht festzustellen (einfach alle Einträge im "session"-Table zählen).

    ABER : Ich möchte gerne die User einzeln auflisten.
    Ich hatte mir 2 Lösungen überlegt :

    Lösung 1
    Beim Login wird mit ALTER TABLE in ein zusätzliches Feld der Sessionstabelle die ProfilID geschrieben.
    Dann kann man einfach zählen
    Code:
    SELECT * FROM 'sessions' WHERE 'uid' > '0'
    aber wie kann ich dann die Nicknames und andere Profildaten auslesen ?
    Klappt das dann so :
    PHP-Code:
    $sql1 "SELECT * FROM `sessions` WHERE `uid` > 0";
    $count mysql_query($sql1);
    while(
    $row1 mysql_fetch_array($count)){

            
    $uid $row1['uid'];
            
    $sql2 "SELECT * FROM `user` WHERE `id` = '$uid';";
            
    $udata mysql_query($sql2);
            while(
    $row2 mysql_fetch_array($udata)){

                    
    $id $row2['id'];
                    
    $nick $row2['nick'];
                    
    $alter $row2['alter'];
                    echo 
    "UID: $id - $nick ($alter)<br>";
            }

    Zuletzt geändert von ExilWessi; 01.03.2007, 09:49.

  • #2
    Informiere dich über JOIN.

    Kommentar


    • #3
      ähm .. muss ich das verstehen ?
      anyway. es klappt sowie ich es mir überlegt hab, habs gerade getestet.
      Zuletzt geändert von ExilWessi; 01.03.2007, 12:24.

      Kommentar


      • #4
        Es mag funktionieren und bei Tests auch ganz flott gehen.
        Aber wenn du 1.000 User hast, werden 1.001 Queries ausgeführt. Das geht dann nicht mehr so flott.
        Mit JOIN wäre es nur 1 Query.

        Kommentar


        • #5
          Original geschrieben von ExilWessi
          ähm .. muss ich das verstehen ?
          Besser wärs. onemorenerd hat dich auch nochmal explizit
          auf die n+1-query problematik aufmerksam gemacht.

          greets
          (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

          Kommentar


          • #6
            ja, ich werd mich da nachher mal reinlesen.
            kann es dann ja noch umschreiben.

            Kommentar


            • #7
              Das würde dann so gehen oder ?

              PHP-Code:
              $sql "SELECT * FROM sessions,user WHERE sessions.uid = user.id AND sessions.uid > 0";
              $wio mysql_query($sql); 
              aber wie lese ich dann die daten aus ? so ?
              PHP-Code:
              while($row mysql_fetch_array($wio)){
                              
              $id $row['user.id'];
                              
              $nick $row['user.nick'];
                              
              $alter $row['user.alter'];
                              $************ = 
              $row['user.************'];
                                              echo 
              "UID: $id - $nick ($alter)";
                                            } 
              Blicke nicht ganz durch und hab auch keine vernünftige funktionsreferenz gefunden
              Zuletzt geändert von ExilWessi; 01.03.2007, 12:49.

              Kommentar


              • #8
                Hi,

                willst du alle informationen zu einem benutzer oder nur
                die angegebenen? Naja wie auch immer.

                Schau dir einfach mal das ergebnis per var_dump oder print_r an
                dann findest du schon raus wie es geht.

                Code:
                SELECT user.id,
                            user.nick,
                            user.alter,
                            user.************ 
                FROM sessions 
                          INNER JOIN user ON id = uid
                WHERE uid > 0
                Was soll eigentlich das uid > 0?

                greets
                (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                Kommentar


                • #9
                  das "uid > 0" entscheidet halt ob nen user eigeloged ist, aber das kann ich jetzt auch per "WHERE sessions.uid = user.id" machen.
                  is jetzt performencemäßig großer unterschied zwischen der inner join und meiner lösung ?

                  PHP-Code:
                  $sql "SELECT * FROM `sessions`,`user` WHERE sessions.uid = user.id"

                  Kommentar


                  • #10
                    Original geschrieben von ExilWessi
                    is jetzt performencemäßig großer unterschied zwischen der inner join und meiner lösung ?
                    Nein, ist fast das selbe.

                    greets
                    (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                    Kommentar

                    Lädt...
                    X