Mr. Ahnungslos: Anzahl der Ergebnisse bei einem select

Hallo,
ich habe eine wohl sehr triviale Frage aber ich komm einfach nicht auf die Lösung.

Ich führe ein Select aus und würde dann gerne abfragen, wie viele Ergebnisse raus gekommen sind (bzw. mir würde die Frage "gabs Ergebnisse?" reichen).

affected_rows gibt mir immer -1, egal ob ich es auf das Ergebniss oder das Datenbank-Objekt anwende. Habe das Manual durch geschaut und alles probiert was sich nur annähernd danach angehört hätte, leider alles ohne Erfolg.

Vielleicht kann mir von euch wer helfen, wäre nett.

Danke

  1. Hello,

    ich habe eine wohl sehr triviale Frage aber ich komm einfach nicht auf die Lösung.

    Ist das eine Datenbank-Frage?

    Ich führe ein Select aus und würde dann gerne abfragen, wie viele Ergebnisse raus gekommen sind (bzw. mir würde die Frage "gabs Ergebnisse?" reichen).

    affected_rows gibt mir immer -1, egal ob ich es auf das Ergebniss oder das Datenbank-Objekt anwende. Habe das Manual durch geschaut und alles probiert was sich nur annähernd danach angehört hätte, leider alles ohne Erfolg.

    Ich nehme jetzt mal einfach an, dass Du MySQL als Datenbank benutzt.

    Da schaun wir doch mal gemeinsam ins Handbuch:

    http://dev.mysql.com/doc/refman/5.1/de/functions.html
    http://dev.mysql.com/doc/refman/5.1/de/group-by-functions.html
    http://dev.mysql.com/doc/refman/5.1/de/group-by-functions.html#id576639

    noch näher ran, oder kommst Du jetzt zurecht?

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo,
      Danke für deine Antwort.

      Die Count-Funktion in einer SQL-Abfrage kenne ich. Aber ich will die Daten auch nutzen. Es soll nur eine Abfrage sein, ob ich überhaupt das Anzeige-Element auf der Seite integrieren muss oder nicht.

      1. Hello,

        Die Count-Funktion in einer SQL-Abfrage kenne ich. Aber ich will die Daten auch nutzen. Es soll nur eine Abfrage sein, ob ich überhaupt das Anzeige-Element auf der Seite integrieren muss oder nicht.

        Dann nutze die Abfragefunktion, das PHP-MYSQL-API dafür vorsieht:

        http://de.php.net/manual/en/function.mysql-num-rows.php
        oder
        http://de.php.net/manual/en/mysqli-result.num-rows.php

        je nachdem, welches Interface Du einsetzt.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  2. Hi!

    Ich führe ein Select aus und würde dann gerne abfragen, wie viele Ergebnisse raus gekommen sind (bzw. mir würde die Frage "gabs Ergebnisse?" reichen).

    Wenn dich allein diese Aussage interessiert und du die Ergebnisse nicht brauchst, mach ein SELECT COUNT(*). Damit PHP wissen kann wieviele Zeilen in einer Ergebnismenge enthalten sind, muss es diese komplett vom DBMS abholen. Ein mysql_query() macht dies bereits im Hintergrund. Anderenfalls (und auch bei ungepufferten Abfragen (mysql_unbuffered_query()) kann es das nicht vor dem Fetchen des letzten Datensatzes wissen. Wenn du also wirklich nur die Zahl brauchst, dann ist ein COUNT(*) die effizienteste Lösung.

    affected_rows gibt mir immer -1, egal ob ich es auf das Ergebniss oder das Datenbank-Objekt anwende. Habe das Manual durch geschaut und alles probiert was sich nur annähernd danach angehört hätte, leider alles ohne Erfolg.

    Du hast nur nicht gelesen, für welche Art Statements mysql_affected_rows() ein sinnvolles Ergebnis liefert und auch nicht den "See also"-Abschnitt beachtet. Dort fändest du eine Funktion verlinkt, die die Anzahl der Einträge in der Ergebnismenge liefert. Aber da du die Datensätze nicht haben willst, ist beides nichts für dich, sondern ein COUNT(*).

    Lo!

    1. Hallo,
      Danke für die Antwort.

      Doch die Ergebnisse brauche ich schon.  Es geht mir nur daran, dass ich der Seite noch Elemente hinzufügen will, falls Einträge vorhanden sind (z.B. Überschrift) und falls nicht, soll nichts erscheinen.

      Im Manual von mysqli steht aber bei affected_rows dort, dass es bei select geht (wenn man es auf das db-Objekt macht):
      http://www.php.net/manual/de/mysqli.affected-rows.php
      da unter Beispiele ist es.

      Das num_rows aus See also hab ich auch schon versucht, kommt aber immer 0 raus.

      Ich mach meine Datenbank-Abfrage so:

      $result = $db->prepare(query);  
      $result->execute();  
      $result->bind_result(variablen);  
        
      if(mindestens eins) //hier brauch ich die funktion  
      while($result->fetch())
      
      1. Hi!

        Im Manual von mysqli steht aber bei affected_rows dort, dass es bei select geht (wenn man es auf das db-Objekt macht):
        http://www.php.net/manual/de/mysqli.affected-rows.php
        da unter Beispiele ist es.

        Ach (*leichtseufz*), wenn du mal gleich gesagt hättest, dass du mysqli anwendest, wäre ich nicht vom Immer-Noch-Default mysql-Extension ausgegangen.

        Ich mach meine Datenbank-Abfrage so:
        [code lang=php]$result = $db->prepare(query);
        $result->execute();
        $result->bind_result(variablen);

        Und dann verschwiegst du auch noch, dass du Prepared Statements verwendest. Ein mysqli_stmt-Objekt hat seine eigene Eigenschaft für affected_rows und dort steht auch nicht davon, dass es sich bei SELECT wie mysql_stmt::num_rows verhält. Also solltest du mit $result->num_rows zum Ziel kommen. (Übrigens ist $result kein sehr sinniger Name für ein Prepared-Statement-Objekt, denn ein Result existiert erst nach dem execute(). Besser wäre ein Name wie $stmt.)

        Lo!

        1. bei $num_rows kam immer 0. Aber nun habe ichs. Ich muss erst ein store_result machen.

          Gut Danke für die Hilfe!