[SQL allgemein] Bei Useronline die Buddies bevorzugen, Ignos nicht anzeigen

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

  • [SQL allgemein] Bei Useronline die Buddies bevorzugen, Ignos nicht anzeigen

    Hallo,

    meine aktuelle Useronline-Funktion ist meiner Meinung nach etwas altmodisch.

    Tabelle "useronline":
    uo_user
    Anton
    Berta
    Carlo
    Daniel

    Tabelle "buddy":
    buddy_von|buddy_fuer
    Anton|Berta

    Tabelle "igno":
    igno_von|igno_fuer
    Anton|Carlo

    Folgender Code soll nun dahingehend optimiert werden,
    dass eventuell alles in einer Abfrage erledigt werden kann.

    Wichtig ist dabei folgendes:

    - Buddies sollen VOR den anderen Usern stehen (wie jetzt auch)
    - Ignos sollen erst gar nicht in der Liste auftauchen

    Code:
    $onliner=mysql_query("SELECT * FROM useronline");
    
    if(mysql_num_rows($onliner))
    
    {
    
       while($row=mysql_fetch_array($onliner))
    
       {
    	
       $abfrage=mysql_query("SELECT * FROM buddy WHERE buddy_von='Anton' AND buddy_fuer='$row[0]'");
       $xxx=mysql_fetch_array($abfrage);
    
          if($xxx[1]==$row['uo_user'])
    
          {$oben .= $row['uo_user']."<br>";}
    
          else
    
          {$unten .= $row['uo_user']."<br>";}
    	
       }
    
    }
    
    echo $oben.$unten;
    Lässt sich das überhaupt in einer Abfrage realisieren? Oder sollte
    ich lieber bei der jetzigen Variante bleiben?

  • #2
    Schau dir mal Joins an.

    Kommentar


    • #3
      Hab ich schon, aber die Sache ist dann doch zu komplex für mich um "einfach mal einen INNER JOIN zu nehmen und schon geht es" :-)

      Kommentar


      • #4
        hmm, und wie gehts weiter?

        Kommentar


        • #5
          Nun ich hab die 2 Abfragen erweitert und fertig, keine Lust mich da ewig mit JOINs rumzuärgern.

          So einfach kann es ja nicht sein, sonst hätte schon längst einer mal eben den Query hier gepostet...

          Kommentar


          • #6
            Von der Online-Tabelle aus zwei LEFT JOINS.

            Einer auf die Ignorier-Tabelle (mit IS NULL sicherstellen, dass die Leute da nicht drinstehen)

            Einer auf die Freunde-Tabelle


            Du selektierst aus der Online-Tabelle den Benutzernamen und sortierst nach
            Code:
            buddies.buddy_von IS NULL

            Jetzt bist du dran.

            Ich hätte dir auch die gesamte Abfrage gegeben, aber nach deiner "keine Lust"-Aussage habe ich auch kein schlechtes Gewissen, erstmal auf einen Ansatz deinerseits zu warten, auf http://php-resource.de/forum/showthr...threadid=28292 stehen einige Beispiele.


            P.S. Das "so leicht kann's nicht sein, sonst..." ist ganz furchtbar schlechte Psychologie...
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar

            Lädt...
            X