MAX(COUNT(zeit)) geht net

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

  • MAX(COUNT(zeit)) geht net

    Hi nochmal,

    ich habe folgendes Problem, welches schon mal diskutiert worden ist, aber keiner eine Lösung wusste, villeicht gibts ja mittlerweile jemanden.
    Ich versuche eine kleine Statistikauswertung, in welcher einzelne Zeilen nach Datum gruppiert werden. Nun benötige ich den Tag mit den meisten aufrufen, was ich so versucht habe:

    PHP-Code:
    $anz_tage=date("m-d-Y",mktime(0,0,0,date('m'),date('d')-$anz_tage,date('Y')));
    $sql="SELECT 
            *,
            date_format(zeit,'%d.%m') AS tag,
            COUNT(zeit) AS total,
            MAX(COUNT(zeit)) AS maxi
        FROM 
            link_stats
        WHERE
            uid='
    $userid' AND
            zeit > '
    $anz_tage'
        GROUP BY date_format(zeit,'%d')
        ORDER BY zeit DESC    
    "


    Leider kommt immer folgende Fehlermeldung:

    Invalid use of group function

    Wenn jemand eine Idee hat, würde ich mich sehr freuen

    MfG Croti

  • #2
    das geht bei mir:

    Code:
    SELECT COUNT(id) anzahl
    FROM tab
    GROUP BY date_format(datum, "%d")
    ORDER BY anzahl DESC
    LIMIT 1
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      thx,
      wolte es aber eigentlich mit einer abfrage hinbekommen, und nach datum ausgeben lassen, aber denn werd ich evtl mal mit 2 abfragen arbeiten

      Kommentar


      • #4
        ?,

        die _eine_ abfrage, die ich gepostet hab, funktioniert und ist nur eine? welche zwote meinst du?
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          mit Deiner Abfrage bekomm ich nur den maximalen Wert. Ich möchte aber zB. alle Werte der letzten 2 Wochen ausgeben lassen (sortiert nach Datum), den maximalen Wert benötige ich nur zum Errechnen eines Prozentsatzes für die graphische Auswertung

          Kommentar


          • #6
            naja,

            du mußt ja den max-wert nicht zwangsläufig in der query bestimmen ... vielleicht weiß noch jemand, wie die query lauten muß, um dein gewünschtes erg zu kriegen ...
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              Ja, ich könnt das alles in einem eigenem Array abspeichern, den dann durchlaufen um die grösste Zahl zu ermitteln, wollts aber gern in der sql Abfrage versuchen

              Kommentar


              • #8
                dein ansatz war schon mal ok...

                probier mal das hier. (ohne garantie.)

                PHP-Code:
                $sql "SELECT 
                            DATE_FORMAT(zeit, '%d.%m') AS tag,
                            COUNT(zeit) AS total,
                            MAX(COUNT(DATE_FORMAT(zeit, '%d'))) AS maxi
                        FROM 
                            link_stats
                        WHERE
                            uid='"
                .$userid."' AND
                            zeit > DATE_SUB(NOW(), INTERVAL 14 DAY)
                        GROUP BY
                            DATE_FORMAT(zeit,'%d')
                        ORDER BY
                            zeit DESC"

                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


                • #9
                  Hi,

                  also es kam zumindest keine Fehlermeldung, aber auch keine Ausgabe

                  Naja bin vorerst auch mit den beiden querys zufrieden.
                  Ich hab auch noch in anderen Foren geguckt, und in eienem, dem http://www.php4-forum.de/ schreibt einer dass ein max(count(irgendwas)) nicht geht

                  Kommentar


                  • #10
                    Upps,

                    hatte mich vertippt, Fehlermeldung kommt doch

                    Invalid use of group function

                    Kommentar


                    • #11
                      neuer vorschlag.

                      PHP-Code:
                      $sql "SELECT 
                                  DATE_FORMAT(zeit, '%m') monat,
                                  DATE_FORMAT(zeit, '%d') tag,
                                  COUNT(zeit) total,
                                  MAX(COUNT(DATE_FORMAT(zeit, '%d'))) maxi
                              FROM 
                                  link_stats
                              WHERE
                                  uid='"
                      .$userid."' AND
                                  zeit > DATE_SUB(NOW(), INTERVAL 14 DAY)
                              GROUP BY
                                  monat,
                                  tag,
                                  maxi
                              ORDER BY
                                  zeit DESC"

                      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
                        Hi,

                        leider wieder die selbe Fehlermeldung
                        Naja, ich hab mich fast scho damit abgefunden dass ich 2 abfragen mach`.

                        Mittlerweile verzweifel ich daran auch die Klicks zu zählen, welche in einer anderen Tabelle gespeichert sind.....

                        Naja, probieren geht über studieren oder so.....

                        Kommentar


                        • #13
                          letzter versuch.
                          PHP-Code:
                          $sql "SELECT 
                                      DATE_FORMAT(zeit, '%m') monat,
                                      DATE_FORMAT(zeit, '%d') tag,
                                      COUNT(zeit) total,
                                      MAX(DATE_FORMAT(zeit, '%d')) maxi
                                  FROM 
                                      link_stats
                                  WHERE
                                      uid='"
                          .$userid."' AND
                                      zeit > DATE_SUB(NOW(), INTERVAL 14 DAY)
                                  GROUP BY
                                      monat,
                                      tag,
                                      maxi
                                  ORDER BY
                                      zeit DESC"

                          wenn das auch nicht klappt, WILL ICH die tabellenstruktur mit demodaten haben!
                          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


                          • #14
                            auch nicht, aber mal eine neue Fehlermeldung:
                            Can't group on 'maxi'
                            Ok, wie gesagt, ich hab mich eigentlich damit abgefunden 2 Abfragen zu machen, finds aber toll das Du scheinbar meinst ich soll mich net damit zufrieden geben

                            Also denn mal die DB Struktur mit ein paar Demodaten:

                            PHP-Code:
                            CREATE TABLE link_stats (
                              
                            uid int(11NOT NULL default '0',
                              
                            zeit datetime NOT NULL default '0000-00-00 00:00:00',
                              
                            seite varchar(200NOT NULL default '',
                              
                            ip varchar(32NOT NULL default ''
                            TYPE=MyISAM;

                            #
                            # Daten für Tabelle `link_stats`
                            #

                            INSERT INTO link_stats VALUES (1'2003-12-29 15:42:35''http://localhost/entwurf/exchange/login/''127.0.0.1');
                            INSERT INTO link_stats VALUES (1'2003-12-29 15:42:46''http://localhost/entwurf/exchange/login/''127.0.0.1');
                            INSERT INTO link_stats VALUES (1'2003-12-29 15:43:20''http://localhost/entwurf/exchange/login/''127.0.0.1');
                            INSERT INTO link_stats VALUES (1'2003-12-29 15:43:41''http://localhost/entwurf/exchange/login/''127.0.0.1');
                            INSERT INTO link_stats VALUES (1'2003-12-29 15:43:55''http://localhost/entwurf/exchange/login/''127.0.0.1');
                            INSERT INTO link_stats VALUES (1'2003-12-29 15:44:18''http://localhost/entwurf/exchange/login/''127.0.0.1');
                            INSERT INTO link_stats VALUES (1'2003-12-29 15:44:40''http://localhost/entwurf/exchange/login/''127.0.0.1'); 

                            Kommentar


                            • #15
                              lass das maxi aus dem GROUP BY doch einfach mal raus.

                              am deuten von fehlermeldungen solltest du mal arbeiten.
                              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

                              Lädt...
                              X