Maximalen Wert ermitteln und dann entsprechende Zeile entnehmen

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

  • Maximalen Wert ermitteln und dann entsprechende Zeile entnehmen

    Hallo
    Ich würde gerne bei meinem Forum auf der Indexseite das Topic mit den meisten Posts anzeigen lassen, die Werte möchte ich mit einer Abfrage ermitteln, also:
    Themenname, Posts und ID

    Im Moment benutze ich diese Query, die erscheint mir aber etwas langsam:

    SELECT name most_name,id most_id,posts most_posts FROM bb_topics ORDER BY posts DESC LIMIT 0,1

    Das müsste doch auch in einer Abfrage mit MAX() gehen oder? Ich habs schon probiert, aber komischerweise klappte das nciht so ganz.

    Könnt ihr mir helfen?

  • #2
    ich habe zwar das gefühl das deine tabelle nicht schön durchdacht ist, aber hier mal ein beispiel für deine problemlösung. kenne ja deine anderen tabelle nicht...

    der ansatz mit MAX() war schon gut. jedoch hast du bestimmt nur syntax-fehler gehabt/gemacht.

    PHP-Code:
    $sql "SELECT name,id,MAX(posts) FROM bb_topics GROUP BY name,id"
    teste das mal.

    EDIT:
    habe ORDER und LIMIT entfernt. MAX() sollte ja nur ein ergebnis liefern
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Die von dir eigegebene Query habe ich auch schon versucht, bei mir lieferte (und liefert immer noch ), alle topics zurück, max(posts) ist einfach die anzahl der posts. Sehr seltsam. Würde ich in diese Query jetzt noch order by und limit einfügen, hätte ich ja wieder die, die ich am anfang gepostet habe

      Und was genau findest du denn nicht durchdacht an meiner Tabelle. Ich bin für Verbesserungsvorschläge immer offen. Optimieren find ich beim Programmieren immer am besten

      Kommentar


      • #4
        auf anhieb fällt mir keine ein-queryige lösung ein,
        MAX() kann man ja nicht in spalten ausgeben lassen ohne die tabelle zu groupieren...

        select max(posts) as meistenposts from tabelle

        ...
        ...
        select name,id from tabelle where posts='$daten['meistenpost]' limit 1

        ...

        kannst ja probieren ob das schneller ist..
        meine Projekte bestaunen: http://www.kleiza.de

        Kommentar


        • #5
          ich will mySQL 4!!!!

          Aber ohne ein SQL, dass sub-selects zulässt, ist Campus' Methode die performanteste
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            die tabelle erschien mir deshalb nicht so gut durchdacht, da dort die werte fix eingetragen sind. aber egal.

            die lösung von campus wollte ich unter anderem auch grad posten.

            du kannst aber mal meinen versuch der ein-query-variante testen, ob der geht, und wenn ja, ob der schnell ist

            PHP-Code:
            $sql "SELECT name,id,posts FROM bb_topics HAVING posts = MAX(posts)"
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              uwouwau, Abraxax fährt schweres geschütz auf. HAVING

              limit 1 nie vergessen, denn dann bricht er bei der ersten übereinstimmung ab, ohne die tabelle zu ende zu suchen...
              meine Projekte bestaunen: http://www.kleiza.de

              Kommentar


              • #8
                Hey Abraxax, gute Arbeit, das funktioniert perfekt!
                Danke.

                Kommentar


                • #9
                  ja. danke danke an alle für die blumen ...

                  @Campus
                  daran habe ich natürlich nicht gedacht. aber HAVING ist für solche dinge immer gut, wenn man ein WHERE machen will/muss und gleichzeitig rechnen muss. hier der MAX() aufruf.

                  @PHPDude
                  gern geschehen.....

                  EDIT:
                  @PHPDude
                  mach das LIMIT 1 mit rein ....

                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    LIMIT 1 hab ich reingemacht, hat aber auch so funktioniert

                    In meinem Benchmark ist Query 1 (die aus dem ersten Post) aber meist schneller. Erstaunlich finde ich.

                    Kommentar


                    • #11
                      weil da kein funktionsaufruf drinnen ist ...
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        Aaah, so ist das, na dann.

                        Kommentar

                        Lädt...
                        X