Order by avg(spalte) unter MySQL?!!!

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

  • Order by avg(spalte) unter MySQL?!!!

    Hallo,

    ich hab mir ein ImageVoting gebastelt und würde nun gerne eine Toplist erstellen....

    Ich hab bis jetzt nichts mit MySQL zu tun gehabt, nur mit anderen SQL Versionen...(auch nich viel ) nun hab ich mir gedacht ich würde die "Top Ten" gevoteten Bilder mit folgender Abfrage bekommen:

    "
    PHP-Code:
    "SELECT photo_id FROM photovote ORDER BY AVG(vote) LIMIT 10 DESC" 
    Aber irgendwie klappt das nicht?! Unterstützt mysql keine order by avg() ?!
    Wenn nich, wie ist die Alternative?!

    Please help me

    Thx jetzt schon mal *g*

  • #2
    "SELECT photo_id FROM photovote ORDER BY vote DESC LIMIT 10"
    mfg
    Günni


    Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
    Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
    Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
    City-Tiger - Online durch die Straßen tigern...

    Kommentar


    • #3
      AVG ist eine Aggregat-Funktion ... da würde ich's mal mit Gruppieren probieren.
      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar


      • #4
        SELECT AVG feld FROm tabelle;

        AVG wird soweit mein kenntnisstand reicht vor dem Feld platziert, da dadurch der Durchschnitt gezogen wird.

        Die 10 höchsten bekommst du wie oben schon gepostet per ORDER BY feldname DESC .

        Kommentar


        • #5
          Thx erstmal an alle die geantwortet haben

          Mh, nur das Problem ist, das ich ja nach dem Durchschnitt sortieren muss, sprich wenn ich "order by vote" mache, bekomm ich ja nich die toplist, sondern jediglich die höchstens votes.. z.B. ein bild wurde 5x mit 7 bewertet und eins 1x mit 10 und 2x mit 1 dann wird mir mit "order by vote" das bild mit der 10 aufgeführt... sprich ich muss halt sowas wie "order by avg" machen aber das geht ja wie gesagt nich in my sql. Ich hab inzwischen mal so testweise in nem anderen SQL probiert und da macht folgende abfrage genau das was ich will:

          select photo_id,avg(vote) from photovote order by avg(vote) desc limit 10

          dann bekomm ich die 10 Bilder mit ihrer bewertung, aber in MySQL macht diese Abfrage nix... irgendwie scheint der Syntax anders zu sein... nur wie!?

          Mit "SELECT AVG feld FROm tabelle" kann ich nur die Bewertung von z.B einem Bild rausfinden (so hab ich es ja gemacht um die Bewertungen anzuzeigen )... aber nich die tops.. manno ich dachte immer SQL sei irgendwie standartisiert.... aber ich hoffe ich jemand weiß den Syntax dafür ?!

          Ansonsten auf jeden Fall schon mal ein riesen Dankeschön für eure Mühe

          Kommentar


          • #6
            Da frage ich mich doch wirklich warum ich überhaupt etwas schreibe ... tu' was ich sage ... dann funzt es auch ... !
            carpe noctem

            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

            Kommentar


            • #7
              In welcher SQL DB kannst Du denn eine AVG ohne GROUP machen?
              Im Übrigen musst Du dann ORDER BY 2 machen zB.
              Beantworte nie Threads mit mehr als 15 followups...
              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

              Kommentar


              • #8
                @MelloPie: MySQL gibt zumindest keinen Fehler ...

                @XenonTW: Das soll doch jetzt wohl detailiert genug sein ... oder?
                carpe noctem

                [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                Kommentar


                • #9
                  @goth ja MySQL is klar, aber XenonTW redet von anderen SQL Versionen
                  Naja is ja auch egal...

                  Das Thema hatten wir schonmal GROUP functions ohne GROUP BY
                  Beantworte nie Threads mit mehr als 15 followups...
                  Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                  Kommentar


                  • #10
                    @MelloPie: Achja ... du warst das ...
                    carpe noctem

                    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                    Kommentar


                    • #11
                      alsoooo als erstes mal kann man avg ohne group einsetzen und zwar hab ich das in Oracle gemacht ohne probs...

                      Goth ich würde ja liebend gerne machen was du sagst, aber ehrlich gesagt ist mir nicht ganz klar in wie weit mir group by helfen soll so lange ich nich nach avg sortieren kann?!
                      Am nettesten wäre es, wenn du mir einfach mal die query aufschreiben würdest, wie du meinst, dass sie funkt, das würde ich gleich verstehen und alles wär gut

                      Denn:

                      "SELECT photo_id, avg(vote) FROM phpbb_photovote GROUP BY vote"
                      würde mir nix bringen, da er mir dann immer noch nix nach avg sortiert hat, sondern nur nach der votezahl (10,9,8..)

                      SELECT photo_id, avg(vote) FROM phpbb_photovote GROUP BY photo_id
                      ..das gleiche, bringt mir auch nix so sortiert er mir nur meine photo_ids

                      "SELECT photo_id, avg(vote) FROM phpbb_photovote GROUP BY photo_id ORDER BY avg(vote)"
                      DIese würde mir ja theoretisch das liefern, was ich brauche..aaaber das geht ja sowieso nich (Invalid use of group function)

                      Kommentar


                      • #12
                        soo, hab jetzt nochmal ein bissel nachgedacht, wie das bei mysql funken könnte und denke so sollte es gehen:

                        SELECT photo_id, avg(vote) as avg FROM phpbb_photovote group by photo_id order by avg desc limit 10

                        Also er scheint mir damit das richtige auszugeben, wollte mich nur nochmal vergewissern bei euch, das es so korrekt is und ich nix übersehen hab..nich das ich dann irgendwie ne verfälschte toplist hab ..
                        vielleicht gibt es ja auch ne elegantere Methode als mit "as" @ Goth vielleicht?!

                        Und eins muss ich wirklich sagen hier sind wirklich schnell welche für einen da.. nettes Forum

                        Big thx to @ll !

                        Kommentar


                        • #13
                          klar kannst Du AVG in Oracle ohne Group benutzen aber nicht wenn Du eine single column hast, die nicht Bestandteil der Aggregatsfunktion ist.
                          Genau das ist der Fehler der in MySQl akzeptiert wird.

                          SELECT photo_id, avg(vote)
                          FROM phpbb_photovote
                          group by photo_id
                          order by 2 desc
                          limit 10

                          Sollte auch gehen
                          Beantworte nie Threads mit mehr als 15 followups...
                          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                          Kommentar


                          • #14
                            @MelloPie: Angeblich aber nur wenn MySQL nicht im ANSI - Mode läuft ...

                            @XenonTW: Ja ... ohne AS ...

                            SELECT photo_id, avg(vote) average FROM phpbb_photovote group by photo_id order by average desc limit 10

                            AS ... ist wohl eh nicht ANSI konform ... ... oder Du nimmst Mello's Weg ... ich habe immer so ein Problem mit dieser Syntax ... habe immer alles gerne "benannt" ...
                            carpe noctem

                            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                            Kommentar


                            • #15
                              Wusste doch, das es auch ohne "AS" gehen muss .. *g*

                              Jetzt funkt alles schön

                              Big THX to MelloPie and Goth !

                              Kommentar

                              Lädt...
                              X