Problem mit Userrängen

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

  • Problem mit Userrängen

    Hallo...

    Ich habe eine Tabelle für den User, in welcher ein Feld seine Punkte enthält.
    In einer anderen Tabelle sind alle Ränge mit dazugehörigen, benötigten Punkten aufgelistet.
    Ich will jetzt, dass nur der Rang aus der Tabelle geladen wird, welcher dem ser zusteht. Angenommen, der Rang, welcher 0 Punkte erfordert ist "Neuzugang". Bei mir werden alle angezeigt, da alle mehr Punkte als 0 benötigen.

    Meine Abfrage:

    PHP-Code:
    SELECT
                        U
    .userid,
                        
    U.nick,
                        
    U.datum,
                        
    U.punkte,
                        
    U.groupid,
                        
    R.rankname,
                        
    G.gruppentext
                    FROM
                        www_user U
                    LEFT JOIN
                        www_ranks R ON U
    .punkte>=R.punkte
                    LEFT JOIN
                        www_groups G ON U
    .groupid=G.groupid
                    WHERE
                        U
    .status '1'
                    
    ORDER by
                        
    ".$order." ".$sc."
                    
    LIMIT
                        
    ".$seite."30 
    SO, ich will LIMIT nicht verändern.
    Wie kann ich es bewerkstelligen, dass immer nur ein Rang, also der korrekte angezeit wird?
    MfG Oli

  • #2
    machmal frag ich mich, warum db-strukturen immer so hingezaubert werden, dass eine abfrage in einem statement nur sehr schwer oder gar nicht möglich ist. ist doch oft so, man baut tabellen auf, und bei der abfrage merkt man ... ", wie krieg ich das ergebnis jetzt da raus?". dann ist bereits was falsch gelaufen.

    warum baut man die tabellen nicht so auf, dass man auch selbst sieht, dass die abfrage leicht zu realisieren ist.


    einen join mit >= gibt es nicht. welchen datensatz soll sie denn dann nehmen? den größten, den kleinsten der der bedingung entspricht?

    Kommentar


    • #3
      Naja, wie soll ichs sonst machen? Weil das ist ja das Problem, was du gesagt hast. Es werden nämlich mom. alle aufgelistet, die der Bedingung entspricht.. Aber wie soll ich sonst die Struktur rausfinden? Ich könnt ne Funktion dazu schreiben...
      Jup, gute Idee. Gut gemacht, Oli... *sichselbstaufdieschulterklopf*

      Kommentar


      • #4
        Hm... Er will nich..

        PHP-Code:
        // Userrang nach user_id ermitteln
        function userrank($userid) {
            
        $db = new db;
            
        $db->connect();
            
        $db->select_db("wiewowarum");
            
        $rankq $db->query_first("
                SELECT 
                    U.punkte, R.rankname, R.punkte 
                FROM 
                    www_user U 
                LEFT JOIN 
                    www_ranks R 
                ON 
                    U.punkte>=R.punkte 
                WHERE 
                    U.userid='"
        .$userid."' 
                LIMIT 1
            "
        );
            
        $rank $rankq['rankname'];
            return 
        $rank;

        1109 : Unknown table 'R' in field list
        Aber ich definiere R doch, und www_ranks existiert...

        Kommentar


        • #5
          lies doch einfach die ränge einmal in eine array ein.

          Kommentar


          • #6
            ich wusste es, von arrays hab ich keine Ahnung... Wie soll ich das denn machen? Also das einlesen krieg ich vielleicht noch hin, aber wie kann ich das mit den Punkten dann machen?

            Kommentar


            • #7
              PHP-Code:
              function userrank($punkte) {
                static 
              $ranks;

                if (!isset(
              $ranks) {

                  
              $ranks = array();
                  
              $res mysql_query("SELECT * FROM `www_ranks`");
                  while (
              $rank mysql_fetch_assoc($res)) $ranks[$rank['punkte']] = $rank['rankname'];

                }

                foreach (
              $ranks as $rank$punkte >= $rank['punkte']? return $rank['rankname']: continue;


              mfg,
              [color=#0080c0]Coragon[/color]

              Kommentar


              • #8
                Original geschrieben von OliOli
                ich wusste es, von arrays hab ich keine Ahnung... Wie soll ich das denn machen?
                dann wirds zeit sich damit zu beschäftigen, denn ohne arrays kommst du auf dauer nicht anständig weiter. ... und es ist soooo einfach.

                also nimm dir mal einen halben tag und beschäftige dich damit.

                Kommentar

                Lädt...
                X