Marc: mysql - Anzahl der Ergebnisse ausgeben

Gibt es eine Möglichkeit, bei einem mysql-query die Anzahl der Ergebnisse zu bekommen, ohne die Ergebnisse speichern zu müssen.

SO in etwa:

Wie viele Datensätze entsprechen der und der Bedingung?

Dieser Wert wird in eine Variable gespeichert und kann dann weiter verwendet werden

  1. Hallo Marc ;~)

    Google nach mysql_num_rows();

    Mit freundlichen Grüßen
    Stefano Albrecht

    1. Hallo Marc ;~)

      Google nach mysql_num_rows();

      Mit freundlichen Grüßen
      Stefano Albrecht

      Das kenne ich ja - aber da brauche ich doch eine variable, die erst einmal die Ergebnisse speichert, oder?

      1. Das kenne ich ja - aber da brauche ich doch eine variable, die erst einmal die Ergebnisse speichert, oder?

        Zum Glück nicht :~)

        Beispiel:

        $query="select * from table;";
        if(!($response=@ mysql_query($query,$connection))){ error_function(); }
        $anzahl=mysql_num_rows($response);

        Mit freundlichen Grüßen
        Stefano Albrecht

        1. Das kenne ich ja - aber da brauche ich doch eine variable, die erst einmal die Ergebnisse speichert, oder?

          Zum Glück nicht :~)

          Beispiel:

          $query="select * from table;";
          if(!($response=@ mysql_query($query,$connection))){ error_function(); }
          $anzahl=mysql_num_rows($response);

          Alles soweit verstanden - was bedeutet das @-zeichen?

          1. Alles soweit verstanden

            Ausgezeichnet ;~)

            Was bedeutet das @-zeichen?

            Das "@" blockiert das interne Fehler-Handling. Dieses ersetzen wir hier durch error_function();. Mit Fehler-Handling meine ich Fehlerbeschreibung bzw. -ausgabe.

            Mit freundlichen Grüßen
            Stefano Albrecht

        2. Moin!

          Beispiel:

          $query="select * from table;";
          if(!($response=@ mysql_query($query,$connection))){ error_function(); }
          $anzahl=mysql_num_rows($response);

          Dein Beispiel ist Müll!

          Angenommen, die Datenbank enthält 1 Gigabyte an Daten, eine Million Datensätze. Dann würde das gesamte Gigabyte (oder zumindest der relevante Teil) von der Datenbank aus übertragen, bei PHP in einen Puffer geschrieben und davon dann die Anzahl ermittelt - nur um das DB-Resultat dann wieder wegzuwerfen.

          Ich empfehle stattdessen lieber, die Datenbank das Zählen erledigen zu lassen:

            
          SELECT count(*) as anzahl FROM table WHERE bedingungen  
          
          

          Und mit PHP wird dann nur noch dieses eine DB-Ergebnis abgefragt, genauso, wie man es sonst üblicherweise auch macht. Das spart extrem viel Übertragungskapazität ein, und auch die Datenbank kann eventuell ganz anders optimieren, wenn sie weiß, dass nur die Anzahl gefragt ist, nicht aber die kompletten DB-Einträge.

          - Sven Rautenberg

          --
          My sssignature, my preciousssss!
          1. Hallo Sven Rautenberg ;~)

            Natürlich hast Du recht.

            Aber:

            1. Du redest von MySQL und 1GB (?)
            2. Wissen wir ja nicht, wie das Skript des Hosts tatsächlich aussieht. Und zudem war ich zum Zeitpunkt meiner Antwort auf eine MySQL-Funktion fixiert :~)

            Mit freundlichen Grüßen
            Stefano Albrecht

            1. Hallo Freunde des gehobenen Forumsgenusses,

              1. Du redest von MySQL und 1GB (?)

              Warum nicht? Ich habe für einen Kunden eine 725 MB große Tabelle erstellt, das funktioniert wunderbar.

              Gruß
              Alexander Brock

              --
              SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:? ss:| de:> js:( ch:| sh:( mo:} zu:}
              http://againsttcpa.com
              1. Hallo Alexander :~)

                Das waren tatsächlich 725 MB?
                Also ich habe zwar nicht angezweifelt, dass MySQL das schaft, doch ich war immer der Meinung, dass MySQL ein vergleichsweise kleins (aber dafür flottes) DBMS ist, und nicht für solche großen Datenmengen ausgelegt ist, allerdings fällt mir gerade ein, dass auch große Banken wie die Hypo-Vereinsbank auf MySQL setzen.

                Danke für die Information :~)

                Mit freundlichen Grüßen
                Stefano Albrecht

                1. Hallo Freunde des gehobenen Forumsgenusses,

                  Das waren tatsächlich 725 MB?

                  Ja.

                  Also ich habe zwar nicht angezweifelt, dass MySQL das schaft, doch ich war immer der Meinung, dass MySQL ein vergleichsweise kleins (aber dafür flottes) DBMS ist, und nicht für solche großen Datenmengen ausgelegt ist, allerdings fällt mir gerade ein, dass auch große Banken wie die Hypo-Vereinsbank auf MySQL setzen.

                  select wort from worter where match(strlow) against("zicke") order by wort limit 1000;

                  ergibt:

                  +-------------+
                  | wort        |
                  +-------------+
                  | rumzicken   |
                  | Zicke       |
                  | Zicken      |
                  | Zickenalarm |
                  | Zimtzicke   |
                  +-------------+
                  5 rows in set (0.04 sec)

                  Gruß
                  Alexander Brock

                  --
                  Ceterum censeo Carthaginem esse delendam
                2. nicht nur die hypo. da gibts jede menge 'großer'. auch die nasa gehört dazu.

            2. Moin!

              Natürlich hast Du recht.

              Natürlich... :)

              Aber:

              Kein "Aber"!

              1. Du redest von MySQL und 1GB (?)

              PHP erlaubt seinen Skripten durchschnittlich Speicherbelegungen von 8 Megabyte - das ist durchaus weit weg von den skizzierten 1 GB, und bei so riesigen (bzw. größeren als 8 MB) Datenbankabfragen muß man sich in der Tat was einfallen lassen (beispielsweise mysql_unbuffered_query() benutzen, was funktioniert, solange nicht ein einziges Ergebnis größer als 8 MB ist).

              1. Wissen wir ja nicht, wie das Skript des Hosts tatsächlich aussieht. Und zudem war ich zum Zeitpunkt meiner Antwort auf eine MySQL-Funktion fixiert :~)

              Wenn der Fragesteller äußert, er kenne mysql_num_rows, und das wäre nicht das, was er wissen will, dann sollte sich deine Lösung irgendwie verbieten. Offensichtlich benötigt der Fragesteller nicht die Datensätze, sondern nur die Anzahl derselben.

              - Sven Rautenberg

              --
              My sssignature, my preciousssss!