Geordnetes Zählen von Einträgen

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

  • Geordnetes Zählen von Einträgen

    Hallo,

    ich weiß, dass es hier schon ein, zwei Beiträge zu diesem Thema gab
    aber ich find mich irgendwie nicht rein. Ich möchte gern eine mysql-
    Abfrage absetzen, bei der alle Zeilen mit einer bestimmten ID gezählt
    werden. Da es zehn verschiedene IDs gibt, wäre es jetzt zu umständlich
    zehnmal die entsprechende Abfrage ( ... WHERE id = 5 ...) abzusetzen.

    In einer vorangehenden Abfrage werden alle zehn Kategorien (aus einer
    anderen Tabelle) mittels while-Schleife aufgelistet und man kann die
    entsprechende Kategorie ja mitauslesen. Nur wie bastel ich jetzt eine
    Abfrage die (möglichst innerhalb dieser Schleife) alle Zeilen in der anderen
    Tabelle mit der jeweiligen ID zählt?

  • #2
    COUNT() und group by verwenden
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Soviel habe ich schon herausgefunden, aber leider nicht wirklich WIE ...
      leider seh ich auch in der Dokumentation nicht wirklich durch was das
      angeht ...
      Kann nicht mal jemand anhand einer Beispielabfrage kurz erklären,
      wie man das machen könnte?
      Das wär ganz fein

      Kommentar


      • #4
        SELECT id, COUNT(*) AS zae
        FROM tabelle
        GROUP BY id
        Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
        var_dump(), print_r(), debug_backtrace und echo.
        Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
        Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
        Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

        Kommentar


        • #5
          innerhalb der Schleife:

          $result = mysql_query("select * form tabelle where id=$wert");
          $num = mysql_num_rows($result);

          so erhälst Du die Anzahl Zeilen die zuftreffen ....

          Gruß

          BKE

          Kommentar


          • #6
            Original geschrieben von bke15
            innerhalb der Schleife:

            $result = mysql_query("select * form tabelle where id=$wert");
            $num = mysql_num_rows($result);

            so erhälst Du die Anzahl Zeilen die zuftreffen ....

            Gruß

            BKE
            und das ist das schlechteste was du machen kannst (stichwort serverbelastung + geschwindigkeit)
            Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
            var_dump(), print_r(), debug_backtrace und echo.
            Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
            Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
            Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

            Kommentar


            • #7
              ja richtig , nur sie hatte explizit danach gefragt, wie sie innerhalbt ihrer Schleife das machen kann :-)

              Gruß

              Kommentar


              • #8
                Und warum soll der andere Query nicht auch in einer Schleife gehen?
                Der macht das selbe in grün, ob es sich dabei um eine Schleife handelt spielt absolut keine Rolle.

                Und ob du nun per mysql_num_rows oder mysql_result auf das Ergebniss zugreifst ist auch egal, ausser das, wie schon gesagt, deine Abfrage mehr Ressourcen frisst.
                mfg - sagg

                Kommentar


                • #9
                  wie wäre es, die abfrage in eine funktion zu packen (die zum Beispiel in einer anderen Datei liegt), die in der Schleife erfasste id mitzuliefern und so in der schleife selber nur die funktion zu starten?
                  wäre das besser bezüglich geschwindigkeit und belastung?

                  Kommentar


                  • #10
                    Original geschrieben von Jule
                    wie wäre es, die abfrage in eine funktion zu packen (die zum Beispiel in einer anderen Datei liegt), die in der Schleife erfasste id mitzuliefern und so in der schleife selber nur die funktion zu starten?
                    wäre das besser bezüglich geschwindigkeit und belastung?
                    Nein, es wäre sogar noch langsamer.


                    Ich weiß echt nicht wieso hier manche von mysql_num_rows usw. reden.... ich hab doch schon die Query gepostet die alles auf einmal macht?!
                    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
                    var_dump(), print_r(), debug_backtrace und echo.
                    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
                    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
                    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

                    Kommentar


                    • #11
                      Ok, da es sich nur um 7 verschiedene Kategorien handelt, habe
                      ich auf die mysql_num_rows-Variante zurückgegriffen (da seh ich
                      noch eher durch)

                      Das ganze sieht dann innerhalb der Schleife so aus:

                      PHP-Code:

                      <?

                      $cat_query = mysql_query("SELECT * FROM cat ORDER BY cat_id");

                      while ($cat = mysql_fetch_array($cat_query)) {
                      echo ?>

                      <table cellpadding=0>
                          <tr valign=top>
                              <td width=200> 
                                  <a href="threads.php?cat_id=<?php echo $cat["cat_id"]; ?>">
                                   <?php echo $cat["cat_name"]; ?></a>
                              </td>
                               <td width=100>
                                    <?php
                                      $catid 
                      $cat["cat_id"]; 
                                      
                      $result = ("SELECT * FROM posts WHERE catid = '".$catid."' ");
                                      
                      $num_rows mysql_num_rows($result);
                                      echo 
                      $num;
                                  
                      ?>
                                </td>
                          </tr>
                      </table>

                      <?php

                          


                      ?>
                      Als Fehlermeldung gibt er mir dann allerdings ein (fast banales)
                      mysql_num_rows(): supplied argument is not a valid MySQL
                      result resourc


                      Im var_dump() wird übrigens das SQL-Statement ausgespuckt,
                      jedoch in jeder Zeile mit der entsprechenden catid, also die
                      Variable geht richtig mit

                      Beispiel:

                      string(38) "SELECT * FROM posts WHERE catid = '1' "


                      Ich verlier grad völlig die Orientierung ...

                      Kommentar


                      • #12
                        PHP-Code:
                        $result = ("SELECT * FROM posts WHERE catid = '".$catid."' "); 
                        Ich würde meinen, du hast da was vergessen, ich tipp mal so ganz spontan auf mysql_query.
                        mfg - sagg

                        Kommentar


                        • #13
                          ok ...
                          genau deswegen geh ich jetzt besser ins bett ...

                          danke trotzdem

                          Kommentar

                          Lädt...
                          X