Group by, dann höchstzahl festlegen

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

  • Group by, dann höchstzahl festlegen

    Hi zusammen,
    ich hab folgendes vorhaben:
    Zur Veranschaulichung meines vorhabens kann man sich ein Votescript vorstellen. Nur bei mir ist das ein klein wenig anders.

    1.) DB Einträge auslesen
    2.) übereinstimmigkeiten zusammenzählen
    3.) Zahl mit höchstem Wert in Variable schreiben

    Bei genau Punkt 3 ist mein Problem.

    Mit PHP/ Smarty hab ich das nun so bis Punkt 2 gelöst.

    PHP-Code:
    $list $osDB->getAll('select *, count(voteid) as zahl from ! group by voteid'
     
    , array( WAHLEN_TABLE$_SESSION['UserId']  ) ); 
    Mit Smarty ruf ich das so ab:
    HTML-Code:
    {foreach item=item key=key from= $list}
    {$item.voteid} ist {$item.zahl} mal vorhanden<br />
    {/foreach}
    Damit bekomm ich nun auch die Anzahl der gemeinsamen Einträge.

    Da ich das aber ab hier noch nicht mit Smarty machen kann, muss ich zunächst mit php weiter arbeiten.
    Dafür muss das höchste Ergebnis in eine Variable gespeichert werden.
    Die brauch ich nämlich später zum vergleich bzw. zur Auswertung.
    Und ich find einfach keine Idee das umzusetzen.
    Ich bitte euch da mal wieder um Hilfe.

    Das nächste Problem ist, das ich später noch eine Abfrage brauche,
    die folgendermaßen aussehen soll:

    Von den Einträgen doppelte oder mehr herauszufiltern, so das nur noch eine voteid von jedem übrigbleibt :/ und hier scheiter ich ebenfalls.

    Könnt ihr mir da weiterhelfen/Tipps geben?

    Vielen Dank im voraus

    LG

  • #2
    Zitat von chrissi11 Beitrag anzeigen
    Und ich find einfach keine Idee das umzusetzen.
    Und ich hab überhaupt keine Idee, was du eigentlich wissen willst. Und was du eigentlich erreichen willst.

    Das nächste Problem ist, das ich später noch eine Abfrage brauche,
    die folgendermaßen aussehen soll: [...]
    Bitte gewöhne dir an, bei solchen Fragestellungen Tabellenstruktur, Beispieldaten und mit diesen gewünschtes Ergebnis zu nennen.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Roger Chef, werd mir mühe geben
      Ok, ich dachte ich hab mir schon Mühe gegeben das verständlich auszudrücken.
      Aber anscheinend noch nicht genug

      Tabellenstruktur:
      wahlid userid hinweis voteid
      1 200 text 100
      2 300 text 100
      3 400 text 200

      Ein User wählt einen anderen, hier: userid 200 wählt voteid 100
      usw usw.

      Mit group by im SQL statement die häufigkeit der gevoteten Personen
      zusammenzählen . Hier wären es zwei. voteid 100 kommt 2 mal vor.
      Damit ist das, das höchste Ergebnis.

      PHP-Code:
      $list $osDB->getAll('select *, count(voteid) as zahl from ! group by voteid'
       
      , array( WAHLEN_TABLE$_SESSION['UserId']  ) ); 
      Nun will ich, das voteid, also das höchste Ergebnis beim zusammenzählen
      in eine Variable geschrieben wird.
      $ergebnis = ??


      ----Andere Sache----
      Beim zweiten Fall soll die Abfrage so sein, das von den gevoteten Ergebnissen
      nur noch jeweils eine voteid ausgegeben wird und nicht alle.
      Also nicht zwei mal 100 sondern voteid 100 dann voteid 200 usw.

      Hoffe das ich das besser beschrieben hab :P
      Zuletzt geändert von chrissi11; 14.09.2010, 19:42.

      Kommentar


      • #4
        Zitat von chrissi11 Beitrag anzeigen
        PHP-Code:
        $list $osDB->getAll('select *, count(voteid) as zahl from ! group by voteid'
         
        , array( WAHLEN_TABLE$_SESSION['UserId']  ) ); 
        Nun will ich, das voteid, also das höchste Ergebnis beim zusammenzählen
        in eine Variable geschrieben wird.
        $ergebnis = ??
        Und $osDB ist jetzt was für ein Objekt?

        Lies in der Doku dazu nach, wie man das Ergebnis einer damit gemachten Abfrage in eine Variable bekommt.

        Beim zweiten Fall soll die Abfrage so sein, das von den gevoteten Ergebnissen nur noch jeweils eine voteid ausgegeben wird und nicht alle.
        Also nicht zwei mal 100 sondern voteid 100 dann voteid 200 usw.
        Also SELECT DISTINCT.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          ja, hab ich gemacht.Dort bin ichja nicht fündig geworden oder eben blind..und hab unendlich gegoogelt nach ggf. beispielen oder so :/

          naja, das hätt ich dann auch anderst schreiben können.
          osDB ist ne klasse auf die zugegriffen wird für die datenbank abfrage

          PHP-Code:

          'select *, count(voteid) as zahl from WAHLENTABELLE group by voteid' 
          distinct also, danke, werd ich mir mal anschauen..bei dem anderen brauch ich wohl nomma nen tipp :/

          Kommentar


          • #6
            SELECT * sollte man nicht verwenden, sondern immer genau die Spalten auswählen, die man haben will.

            Alle Spalten, die im SELECT aufgeführt werden, sollten auch im GROUP BY stehen. Jede andere Datenbank haut dir sonst Fehlermeldungen um die Ohren, nur MySQL ist so großzügig und ignoriert es (liefert dafür aber eventuell falsche Ergebnisse).

            SQL-Schlüsselwörter sollten groß geschrieben werden, damit sie sich optisch von den Programmiersprachen abhebt. Spalten- und Tabellennamen hingegen sollten klein geschrieben werden.

            Kommentar


            • #7
              Zitat von chrissi11 Beitrag anzeigen
              osDB ist ne klasse
              Erstaunlich - trotz expliziter Nachfrage schaffst du es nicht, uns irgendwelche Informationen zu liefern, die irgendwie weiterhelfen könnten.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                @hell, danke, werds mir mal versuchen anzugewöhnen und die sache nomma ändern

                @wahsaga
                was ist an der aussage so schwer zu verstehen, wenn ich dir sage
                das diese auf eine klasse zugreift die für die datenbankabfrage zuständig ist?
                dafür hab ich nochmal extra das statement geändert. wo ist das problem?
                spielt doch eigentlich garkeine rolle was das. wichtig ist doch nur das statement oder? und das hab ich extra nochmal geändert *amkopfkratz

                Kommentar


                • #9
                  Zitat von chrissi11 Beitrag anzeigen
                  was ist an der aussage so schwer zu verstehen, wenn ich dir sage das diese auf eine klasse zugreift die für die datenbankabfrage zuständig ist?
                  Es geht nicht darum, ob das schwer zu verstehen ist - das ist so selbstverständlich, dass es absolut überflüssig ist, dass du das noch mal erwähnst.

                  Du wolltest aber wissen, wie du das Ergebnis der Abfrage in eine Variable bekommst - und das hängt davon ab, was für eine Klasse das den eigentlich ist (nicht davon, was sie ganz offensichtlich macht).
                  Dazu hast du uns immer noch keine Information geliefert (obwohl ich nicht sehe, was an der Frage danach so schwer zu verstehen ist, das müsstest du uns jetzt also bitte sagen) - also können wir dir diesbezüglich auch nicht weiterhelfen.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Ich bin mir auch nicht sicher, was du genau bewerkstelligen willst. Aber suchst du vielleicht "GROUP BY foo HAVING irgendwas"?

                    Kommentar


                    • #11
                      da muss ich wasaga zustimmen ..

                      wenn ich aber mal von meiner Datenbank-Klassen schließen darf ....

                      $list ist ein array .. das sollte unter anderem einen Eintrag für das von dir abgefragte count(voteid) as zahl haben ...

                      häng an deine Abfrage ein "ORDER BY zahl DESC" an, dann landet die höchste zahl in der ersten Ergebnis-Zeile -> bei mir würde dann ein $list[0]['zahl']
                      die von dir gewünschte Angabe enthalten

                      bei deiner Datenbankklasse musst du halt mal in der Doku nachschauen, wie das array aufgebaut ist
                      [font=Verdana]
                      Wer LESEN kann, ist klar im Vorteil!
                      [/font]

                      Kommentar

                      Lädt...
                      X