Ankündigung

Einklappen
Keine Ankündigung bisher.

Kategorisierte Abfrage

Einklappen

Neue Werbung 2019

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

  • Kategorisierte Abfrage

    Guten Tag zusammen,

    ich suche gerade nach einer Lösung für folgende Aufgabe:

    Ich habe eine Tabelle mit Datensätzen, die nach Jahren sortiert ausgegeben werden soll.

    Nehmen wir also an, dass es zwei felder gibt: id und jahr

    SELECT * FROM tabelle order by jahr

    soweit alles gut.


    Nun ist es mir aber ein anliegen, dass man nicht einfach eine große Liste bekommt, sondern dass diese unterteilt nach Jahren ist.

    So dass alle Einträge aus 2009 auch die Überschrift 2009 bekommen .


    Weiß hier jemand eine Lösung ???

    Liebe Grüße
    Sub


  • #2
    Was meinst du mit "unterteilt" und "Überschriften"? Steckt da noch eine Applikation hinter? Dann gibst du das da halt aus, du hast doch pro Datensatz die Information über das Jahr. Wenn du das nur ein mal willst, merkst du dir immer das Jahr des vorherigen Eintrages und handelst entsprechend.
    You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

    Kommentar


    • #3
      Hi... ich mein das so:


      2009
      einträge...

      2008
      einträge

      2007
      einträge

      Kommentar


      • #4
        Dann kannst du ja jetzt direkt umsetzen was ich vorgeschlagen habe.
        You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

        Kommentar


        • #5
          Gruppenbruch (Standardverfahren - PHP.de Wiki)

          Kommentar


          • #6
            Hallo allerseits
            Der Gruppenbruch bringt mich noch zum Wahnsinn
            Seit Tagen versuche ich das Umzusetzen was hier im Forum in etlichen Beiträgen gepostet wurde. Auch das Wiki hab ich x-mal durch gelesen, aber ich checks einfach nicht!! Ist definitiv zu hoch für mich, so trivial die Funktion auch sein mag.

            Ich wäre der Forumsgemeinde wirklich sehr dankbar, wenn sie mir da in DAU-verständlicher Erklärung behilflich sein könnte.

            Meine Abfrage sieht so aus:
            PHP-Code:
            <php?
            mysql_select_db($database_braun$braun);
            $query_query "SELECT f.Kategorie,         
                                   f.ID,         
                                   f.Marke,         
                                   f.Modell,        
                                   f.Jahrgang,         
                                   f.KM,         
                                   f.Farbe,         
                                   f.Klima,         
                                   f.Optionen,         
                                   f.Bild,         
                                   f.Preis 
                            FROM vw_alleFZ f 
                            WHERE (f.aktiv = 'Ja') 
                            ORDER BY f.KatID ASC, f.Marke ASC"
            ;
            $query mysql_query($query_query$braun) or die(mysql_error());
            $row_query mysql_fetch_assoc($query);
            $totalRows_query mysql_num_rows($query);
            ?> 
            Die Ausgabe Im Moment noch so:
            Code:
            <body>
            <table border="1" cellpadding="0" cellspacing="0">
              <tr>
                <td>Kategorie</td>
                <td>ID</td>
                <td>Marke</td>
                <td>Modell</td>
                <td>Jahrgang</td>
                <td>KM</td>
                <td>Farbe</td>
                <td>Klima</td>
                <td>Optionen</td>
                <td>Bild</td>
                <td>Preis</td>
              </tr>
              <?php do { ?>
                <tr>
                  <td><?php echo $row_query['Kategorie']; ?></td>
                  <td><?php echo $row_query['ID']; ?></td>
                  <td><?php echo $row_query['Marke']; ?></td>
                  <td><?php echo $row_query['Modell']; ?></td>
                  <td><?php echo $row_query['Jahrgang']; ?></td>
                  <td><?php echo $row_query['KM']; ?></td>
                  <td><?php echo $row_query['Farbe']; ?></td>
                  <td><?php echo $row_query['Klima']; ?></td>
                  <td><?php echo $row_query['Optionen']; ?></td>
                  <td><?php echo $row_query['Bild']; ?></td>
                  <td><?php echo $row_query['Preis']; ?></td>
                </tr>
                <?php } while ($row_query = mysql_fetch_assoc($query)); ?>
            </table>
            </body>
            </html>
            <?php
            mysql_free_result($query);
            ?>
            Also eine einfache Tabelle mit allen Fahrzeugen, sortiert nach Kategorie und Marke.

            Ich möchte aber, dass die Kategorie als Überschrift über den jeweiligen Fahrzeugen steht. ChrisB hat mich schon auf den Gruppenbruch hingewiesen und ich weiss, dass dies genau die Funktion wäre die ich brauche, aber wie gesagt: ICH KRIEGS NICHT HIN! Bitte um Hilfe, Danke

            Kommentar


            • #7
              Fußgesteuerte Schleife ist ne schlechte Idee, du greifst schon auf das Ergebnis zu, bevor du es ermittelt hast -> while Schleife anstatt do-while.

              Und womit genau hast du Probleme?

              Für Gruppenbruch sollte deine Ergebnismenge entsprechend sortiert sein. Du beginnst beim ersten Datensatz und prüfst, ob die zuletzt ausgegebene Überschrift mit der des aktuellen übereinstimmt (Initialwert der letzten Überschrift ist null). Falls nicht, wird die Überschrift ausgegeben und gemerkt für den nächsten Schleifendurchlauf.
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                PHP-Code:
                $jahr '9999';

                $sql "SELECT jahr,daten FROM tbl ORDER BY jahr DESC";
                $erg mysql_query($sql);

                while ( 
                $row mysql_fetch_assoc($erg) ){
                  if (
                $jahr != $row['jahr'] ) { 
                    
                $jahr $row['jahr'];
                    echo 
                $jahr;
                  }
                  echo 
                $row['daten'];

                PHP-Code:
                if ($var != 0) {
                  
                $var 0;

                Kommentar


                • #9
                  ok, danke
                  Ich hab meinen Code nun folgendermassen angepasst:
                  PHP-Code:
                  <php?
                  mysql_query("SET NAMES 'utf8'");
                  mysql_query("SET CHARACTER SET 'utf8'");
                  mysql_select_db($database_braun$braun);
                  $query_sql "SELECT f.Kategorie,         
                                       f.ID,         
                                       f.Marke,         
                                       f.Modell,         
                                       f.Jahrgang,         
                                       f.KM,         
                                       f.Farbe,         
                                       f.Klima,         
                                       f.Optionen,         
                                       f.Bild,         
                                       f.Preis 
                                FROM vw_alleFZ f 
                                WHERE (f.aktiv = 'Ja') 
                                ORDER BY f.KatID ASC"
                  ;
                                
                  $sql mysql_query($query_sql$braun) or die(mysql_error());
                  $row_sql mysql_fetch_assoc($sql);
                  $totalRows_sql mysql_num_rows($sql);
                  $cat '';
                  $erg mysql_query($query_sql);

                  ?> 
                  Und die Ausgabe so:
                  Code:
                  <body>
                  <table border="1" cellpadding="0" cellspacing="0">
                    <tr>
                      <td>Kategorie</td>
                      <td>ID</td>
                      <td>Marke</td>
                      <td>Modell</td>
                      <td>Jahrgang</td>
                      <td>KM</td>
                      <td>Farbe</td>
                      <td>Klima</td>
                      <td>Optionen</td>
                      <td>Bild</td>
                      <td>Preis</td>
                    </tr>
                    <?php while (	$row = mysql_fetch_assoc($erg) ){
                  	if ($cat != $row ['f.Kategorie'] ){
                  		$cat = $row['f.Kategorie'];
                  		echo $cat;
                  	}
                  } ?>
                      <tr>
                        <td><?php echo $row_sql['Kategorie']; ?></td>
                        <td><?php echo $row_sql['Marke']; ?></td>
                        <td><?php echo $row_sql['Modell']; ?></td>
                        <td><?php echo $row_sql['Jahrgang']; ?></td>
                        <td><?php echo $row_sql['KM']; ?></td>
                        <td><?php echo $row_sql['Farbe']; ?></td>
                        <td><?php echo $row_sql['Klima']; ?></td>
                        <td><?php echo $row_sql['Optionen']; ?></td>
                        <td><?php echo $row_sql['Bild']; ?></td>
                        <td><?php echo $row_sql['Preis']; ?></td>
                      </tr>
                  </table>
                  </body>
                  Das ergebnis ist jetz, dass ich nur noch eine Zeile erhalte mit dem ersten Fahrzeug. Und Überschrift ist auch keine da.

                  Was ist falsch? resp. was hab ich da falsch verstanden?

                  Kommentar


                  • #10
                    Schau dir mal an, wo du den Anweisungsblock deiner While-Schleife wieder beendet hast ...


                    Und in einer Tabelle kannst du nicht irgendwo einfach Text ausgeben, da solltest du schon noch ein TR/TH o.ä. drum herum packen.
                    (Mag sein, dass das jetzt erst mal nur zum Test sein soll - aber es ist gut möglich, dass die Fehlerkorrektur des Browsers solchen Text gleich unterschlägt, und dann kannst du lange Testen, und siehst trotzdem nüscht.)

                    Kommentar


                    • #11
                      Ich glaub jetzt hab ichs noch schlimmer gemacht. Jetzt haba ich eine Tabelle (immer noch ohne Überschrift) in der 18x (ist Anzahl der Datensätze) der erste Datensatz angezeigt wird.

                      PHP-Code:
                      <body>
                      <table border="1" cellpadding="0" cellspacing="0">
                        <tr>
                          <td>Kategorie</td>
                          <td>ID</td>
                          <td>Marke</td>
                          <td>Modell</td>
                          <td>Jahrgang</td>
                          <td>KM</td>
                          <td>Farbe</td>
                          <td>Klima</td>
                          <td>Optionen</td>
                          <td>Bild</td>
                          <td>Preis</td>
                        </tr>
                        <?php while (    $row mysql_fetch_assoc($erg) ){
                          if (
                      $cat != $row ['f.Kategorie'] ){
                              
                      $cat $row['f.Kategorie'];
                              
                      ?>
                        <tr>
                            <td><?php echo $cat;?></td>
                        </tr>  
                      <?php        
                          
                      }
                          
                      ?>
                      <tr>
                            <td><?php echo $row_sql['Kategorie']; ?></td>
                            <td><?php echo $row_sql['Marke']; ?></td>
                            <td><?php echo $row_sql['Modell']; ?></td>
                            <td><?php echo $row_sql['Jahrgang']; ?></td>
                            <td><?php echo $row_sql['KM']; ?></td>
                            <td><?php echo $row_sql['Farbe']; ?></td>
                            <td><?php echo $row_sql['Klima']; ?></td>
                            <td><?php echo $row_sql['Optionen']; ?></td>
                            <td><?php echo $row_sql['Bild']; ?></td>
                            <td><?php echo $row_sql['Preis']; ?></td>
                          </tr>    
                      <?php   
                      ?>
                          
                      </table>
                      </body>

                      Kommentar


                      • #12
                        Wo kommt denn die Variable $row_sql inerhalb deines Ausgabeblockes her?


                        Hast du das error_reporting auf E_ALL und display_errors auf on stehen? Wenn nicht, mach das bitte schleunigst.

                        Kommentar


                        • #13
                          Zitat von ChrisB Beitrag anzeigen
                          Wo kommt denn die Variable $row_sql inerhalb deines Ausgabeblockes her?
                          OK, Die Tabelle wird jetzt richtig ausgegeben, habe $row_sql in $row geändert, danke für den Hinweis.

                          Zitat von ChrisB Beitrag anzeigen
                          Hast du das error_reporting auf E_ALL und display_errors auf on stehen? Wenn nicht, mach das bitte schleunigst.
                          Hab ich gemacht und bekommen den Fehler:
                          Undefined index: f.Kategorie in [Pfad zur Seite] on line 86

                          Also wenn ich das richtig verstehe ist an der Zeile
                          Code:
                          if ($cat != $row ['f.Kategorie'] ){
                          etwas falsch, aber keine Ahnung was!!

                          Kommentar


                          • #14
                            ok, habs rausgefunden...
                            musste bei
                            PHP-Code:
                            <?php while (    $row mysql_fetch_assoc($erg) ){
                                if (
                            $cat != $row ['f.Kategorie'] ){
                                    
                            $cat $row['f.Kategorie'];
                                    
                            ?>
                            einfach das "f." löschen

                            Allen die geholfen haben, insbesondere ChrisB, vielen Dank!

                            Kommentar

                            Lädt...
                            X