Datensätzen pro Monat ausgeben

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

  • Datensätzen pro Monat ausgeben

    hallo forum,

    habe folgende abfrage, die mir die anzahl an einträgen pro monat,
    und monatensnamen ausgibt, gruppiert/zusammenfasst.
    PHP-Code:
    SELECT *,COUNT(link_name) AS anzahlDATE_FORMATFROM_UNIXTIME(Datum), '%M %Y') AS Datum  
    FROM links_links GROUP BY DATE_FORMAT
    FROM_UNIXTIME(Datum), '%m' )
    ORDER BY DATE_FORMATFROM_UNIXTIME(Datum), '%m' DESC 
    die ausgabe schaut so aus:

    jan - 54
    feb - 76
    mar - 12
    usw.



    die ausgabe soll aber so ausschauen:

    jan - 54
    ---------------------------------------
    1.link im jan
    2. link im jan.
    3. link im jan.
    usw.

    feb - 76
    ---------------------------------------
    1. link im feb.
    2. link im feb.
    3. link im feb.
    usw.

    mar - 12
    ---------------------------------------
    1. link im mar.
    2. link im mar.
    3. link im mar.
    usw.


    versuch 1:
    wenn ich mir ".$row[link_name]." ausgeben lasse,
    erscheint jeweils nur der letzte eintrag.

    versuch 2:
    eine weitere abfrage innerhab der while-schleife der ersten abfrage,
    gibt mir je monat alle links aus.

    hab bestimmt wieder ein brett vor'm kopf,
    aber kann mal wer einen tipp geben



    danke & gruss
    bastian
    Zuletzt geändert von bastian; 18.10.2004, 12:05.

  • #2
    hab nicht ganz drüber geguckt, weils viel zu unstrukturiert ist.

    aber das group by macht probleme, denke ich.

    Kommentar


    • #3
      hi TobiaZ

      unstrukturiert ist es, weil ich die zeit als ts in einem bigint-feld speichere
      und somit etwas unglücklich das datum zurückformatieren muss.

      "group by" muss aber schon sein, da ich sonst die monatsnamen
      je anzahl an datensätzen angezeigt bekomme.

      die eigentliche frage wäre: reicht die eine abfrage, oder wo muss die nächste abfrage hin...

      b.

      Kommentar


      • #4
        unstrukturiert ist es, weil ich die zeit als ts in einem bigint-feld speichere
        Falsch! unstrukturiert ist es, weil du nicht in der Lage bist den Query durch Umbrüche (an der richtigen Stelle) zu formatieren.

        wenn du aufs group by nicht verzichten kannst, müssen wahrscheinlich 2 abfragen her. aber wie gesagt, so guck ichs mir nicht an. irgendwann muss auch hier mal ordnung herrschen. Mehr als 2 solltest du auf keinen fall benötigen.

        Kommentar


        • #5
          also dein grouping is mal voll für die füsse.
          naja wie auch immer entweder 2 Queries oder codeseitig das Problem lösen.
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            habe aber doch den php-teil umbrochen.

            sorry, aber wenn du mir sagst, wie er "ordentlich" umbrochen wird,
            werd ichs künftig so halten



            grouping voll für die füsse
            mist, dachte ich hätt auch mal ein korn gefunden.

            b.

            Kommentar


            • #7
              Zb. das die hauptanweisungen SELECT WHERE etc untereinander gelistet sind. gängige formatierung, wie es in den meisten threads hier zu sehen ist.

              Kommentar


              • #8
                Hallo bastian
                Auch im Bandwurm lässt sich schon 'mal ein grober Fehler erkennen:
                Select * [...] GROUP BY
                Im GROUP sind nicht alle SELECT-Felder enthalten.
                Andere SQL-Server weigern sich, so was auszuführen.
                MySQL führt das aus in der Annahme, dass der
                Queryprogger weiss was er da tut...

                Kommentar


                • #9
                  OK . Wenn ich das richtig Verstehe liegt dein Problem darin dass du
                  die Gruppierung in der Selben Query hast in der Du die einzelnen DS
                  auslesen willst, was natürlich paradox ist:


                  Ein Ansatz wäre eine geschachtelte Schleife mit Query 1 ( Group) in
                  der äusseren und das Auslesen der betreffenden DS in der inneren
                  zu erstellen
                  PHP-Code:
                  Query 1:

                  SELECT 
                        COUNT
                  (link_name) AS anzahl
                        
                  DATE_FORMATFROM_UNIXTIME(Datum), '%M %Y') AS Datum  
                  FROM links_links 
                  GROUP BY DATE_FORMAT
                  FROM_UNIXTIME(Datum), '%m' )
                  ORDER BY DATE_FORMATFROM_UNIXTIME(Datum), '%m' DESC 
                  und innen
                  PHP-Code:
                  Query 2:

                  SELECT 
                  FROM links_links 
                  WHERE DATE_FORMAT
                  FROM_UNIXTIME(Datum), '%M %Y') = $monatjahr_aus_query1 
                  ORDER BY DATE_FORMAT
                  FROM_UNIXTIME(Datum), '%m' DESC 
                  und das ganze etwa so


                  PHP-Code:
                  Ansatz:
                  $result $db -> query($sql1);
                  $cache $result->cache();
                  while (
                  $row $cache->fetch()) {
                         print 
                  $row['datum']."<br>";
                         
                  $sql2 "SELECT * ... 
                                       WHERE DATE_FORMAT( FROM_UNIXTIME(Datum) = '"
                  .$row['datum']."'";
                         
                  $result $db->query($sql2);
                         while (
                  $row2 $result->fetch()) {
                               print 
                  $row['link'] .....
                          }


                  Als Ansatz nur so

                  chansel
                  Zuletzt geändert von chansel0049; 20.10.2004, 08:33.
                  chansel0049
                  ----------------------------------------------------
                  if you've reached the bottomline - dig further!
                  Übersetzer gesucht? http://www.babelport.com

                  Kommentar


                  • #10
                    Ein Ansatz wäre eine geschachtelte Schleife mit Query 1 ( Group) in der äusseren und das Auslesen der betreffenden DS in der inneren zu erstellen
                    Ganz schlech! Wie schnell hat man da ein paar hundert bis tausend queries...

                    Kommentar


                    • #11
                      @TobiaZ

                      Wie wäre dein Ansatz,

                      SubSelects in MySQL gehen meines wissens nicht...
                      chansel0049
                      ----------------------------------------------------
                      if you've reached the bottomline - dig further!
                      Übersetzer gesucht? http://www.babelport.com

                      Kommentar


                      • #12
                        kommt auf mysql an, irgendwann gehen subselects und/oder union, hilfreich sollte beides sein, da müsste man halt mal im handbuch nachlesen...

                        abgesehen davon könnte man ja aber vielleicht einfach nur die datensätze auslesen und in php dann zählen
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          abgesehen davon könnte man ja aber vielleicht einfach nur die datensätze auslesen und in php dann zählen
                          entweder so, oder eben eine zweite query zum zählen.

                          wüsste nicht, warum man dafür nen code vorkauen sollte, vorallem weils weiter oben schonmal vorgeschlagen wurde.

                          Kommentar

                          Lädt...
                          X