Simon: User aus DB auslesen welcher die meisten Einträge hat.

Hi,
hab da ein Kleines Problem:
ich hab eine MYSQL DB in der sich User Id's und andere Einträge befinden:

Da es mehrer Einträge/UserId gibt würde jetzt gerne die User Id herausfinden welche am öftesten vorkommt und wo eine andere Spalte 0 ist.

So falls nicht ganz verständlich:
--------------------------
  ID  | UserId | eintrag |
--------------------------
  1   | 232424 |    0    |
  2   | 232424 |    1    |
  3   | 748328 |    0    |
  4   | 232424 |    0    |
  5   | 748328 |    0    |
  6   | 232424 |    1    |
  7   | 748328 |    0    |
  8   | 232424 |    1    |
  9   | 495929 |    0    |
  10  | 232424 |    1    |

Ich habe 6 Einträge des Users 232424 und 2 davon sind 0,
3 Einträge des Users 748328 und 3 davon sind 0
und 1 Eintrag des Users 495929 welcher 0 ist.

In diesen Beispiel müsste es mir den User 748328 liefern. Er hat zwar nicht am meisten Einträge in der DB aber die meisten Einträge die auf 0 sind.

Kann ich das bereits bei der Abfrage machen?

MfG
Simon

  1. Hi,

    Da es mehrer Einträge/UserId gibt würde jetzt gerne die User Id herausfinden welche am öftesten vorkommt und wo eine andere Spalte 0 ist.

    GROUP BY/COUNT/MAX

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
    1. Ok,

      SELECT
        UserID,
        count(eintrag)
      FROM
        DB
      WHERE
        UserId = ?
      GROUP BY UserID';

      Aber was soll ich jetzt mit dem MAX machen?

      1. Mahlzeit Simon,

        WHERE
          UserId = ?

        Was soll das? Du willst doch die passende UserId erst *herausfinden* - dann kannst Du sie doch nicht als Suchkriterium nutzen ...

        Du willst (vermutlich):

        jede UserId
        und die Anzahl der Datensätze
        bei denen eintrag gleich 0 ist
        gruppiert nach den UserIds

        Jetzt übersetze das bitte mal nach SQL.

        Aber was soll ich jetzt mit dem MAX machen?

        Du wolltest doch denjenigen User, für den die meisten Einträge existieren?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Was soll das? Du willst doch die passende UserId erst *herausfinden* - dann kannst Du sie doch nicht als Suchkriterium nutzen ...

          Sorry, hab da grad alles durcheinander gebracht.
          So sollte es eigentlich passen ohne dem Max, weil ich nicht weiß wo ich den "einbauen" soll:

          $sql = 'SELECT  
                    `UserId`,  
                    count(eintrag)  
                  FROM  
                    `DB`  
                  WHERE  
                    `eintrag` = 0  
                  GROUP BY  
                    `UserId`';
          

          Kannst du mir da bei MAX helfen?

          1. Mahlzeit Simon,

            $sql = 'SELECT

            UserId,
                      count(eintrag)
                    FROM
                      DB
                    WHERE
                      eintrag = 0
                    GROUP BY
                      UserId';

              
            Wie sieht die Ergebnismenge aus? Kannst Du damit bereits etwas anfangen? Könntest Du Dir vorstellen, welches Vorgehen sinnvoll wäre, um die von Dir gewünschte Information zu erhalten?  
              
              
            
            > Kannst du mir da bei MAX helfen?  
              
            Könnte ich. Die [MySQL-Dokumentation](http://dev.mysql.com/doc/refman/5.5/en/group-by-functions.html#function_max) könnte das auch.  
              
              
            MfG,  
            EKKi  
            
            -- 
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            
            1. Wie sieht die Ergebnismenge aus? Kannst Du damit bereits etwas anfangen? Könntest Du Dir vorstellen, welches Vorgehen sinnvoll wäre, um die von Dir gewünschte Information zu erhalten?

              Ja mit dem Ergebnis kann ich noch nicht viel anfangen. Ich bekomme zwar die Anzahl an einträgen einer ID aber eben nicht das Max.

              Könnte ich. Die MySQL-Dokumentation könnte das auch.

              ^^ ja ich weiß, hab auch schon nachgeschaut, nur hab ich mein Problem um das Maximum von count zu bekommen.

              1. So, hab es jetzt so gemacht und es scheint auch zu funktionieren:

                $sql = 'SELECT  
                          `UserId`,  
                          count(eintrag) as count  
                        FROM  
                          `DB`  
                        WHERE  
                          `eintrag` = 0  
                        GROUP BY  
                          `UserId`  
                        ORDER BY  
                          `count` desc  
                        LIMIT  
                          1';
                

                Mfg
                Simon

                1. So, hab es jetzt so gemacht und es scheint auch zu funktionieren:

                  Ja, sollte funktionieren - aber ist sehr sehr dreckig.

                  Welches Problem hast du eine Funktion mit einem 3 Zeichen langen Funktionsnamen an geeigneter Stelle "herumzuwickeln"?

              2. Mahlzeit Simon,

                Wie sieht die Ergebnismenge aus? Kannst Du damit bereits etwas anfangen? Könntest Du Dir vorstellen, welches Vorgehen sinnvoll wäre, um die von Dir gewünschte Information zu erhalten?

                Ja mit dem Ergebnis kann ich noch nicht viel anfangen.

                Ich mit Deiner Antwort auch nicht. Ich hatte nach der Ergebnismenge gefragt.

                Ich bekomme zwar die Anzahl an einträgen einer ID aber eben nicht das Max.

                Wie wär's, wenn wir den den ersten Schritt vor dem zweiten und den dritten erst zum Schluss machen? ;-)

                ^^ ja ich weiß, hab auch schon nachgeschaut, nur hab ich mein Problem um das Maximum von count zu bekommen.

                Das wissen Dein Leser - das hast Du schließlich schon in Deinem ersten Beitrag geschrieben. Wenn Du es ihnen aber schwer machst, Dir Schritt für Schritt zu helfen, indem Du auf gezielte Nachfragen nicht eingehst, sinken Deine Chancen, zielführende Hilfe zu bekommen, rapide gegen 0.

                MfG,
                EKKi

                --
                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                1. Ok, mein letztes Problem ist ja nur mehr die funktion max einzubinden oder wie Suit sagt "herumzuwickeln".

                  Funktionieren würde es ja auch nur eben viel zu umständlich.

                  Nur max(count(eintrag)) geht ja nicht oder ?

                  1. Nur max(count(eintrag)) geht ja nicht oder ?

                    Nein, eine kleine Unterabfrage wirst du afaik schon brauchen.