han: anzahl aller datensätze ienr db

Hi,

Vorraussetzungen mysql, php.

Möchte die Anzahl aller Datensätze in einer Tabelle 'tabelle'.

$abfrage='SELECT COUNT(spalte1) FROM tabelle';
$ergebnis=mysql_unbuffered_query($abfrage);

Mit SELECT COUNT kann ich doch die Datensätze zählen?
Und mit einem unbuffered Query blaste ich doch das DBMS weniger, oder?
Doch wie komme ich jetzt an das Ergebnis?
Wo ist mein Denkfehler?
Ich möchte einfach die Anzahl der Datensätze in 'tabelle'

frohes festchen

P.S.: geht eigtl auch SELECT COUNT(spalte1) FROM tabelle WHERE spalte1=1?
d.h. ich möchte alle Datensätze der Datenbank zählen, die in spalte1 eine 1 haben...

  1. Vorraussetzungen mysql, php.

    Schon mal ganz gut... :)

    Möchte die Anzahl aller Datensätze in einer Tabelle 'tabelle'.

    $abfrage='SELECT COUNT(spalte1) FROM tabelle';

    Sehr gut! Besser vielleicht noch COUNT(*).

    $ergebnis=mysql_unbuffered_query($abfrage);

    Mit SELECT COUNT kann ich doch die Datensätze zählen?
    Und mit einem unbuffered Query blaste ich doch das DBMS weniger, oder?

    Vielleicht. Das sollte aber in diesem Fall egal sein, oder?

    Doch wie komme ich jetzt an das Ergebnis?

    Ist die Varaible ergebnis leer? Gabs beim Exekutieren des SQL-Statements vielleicht iene Fehlermeldung? Hast Du ueberhaupt eine Verbindung zur DB? Alles mal ausprobieren und hier melden...

    Wo ist mein Denkfehler?
    Ich möchte einfach die Anzahl der Datensätze in 'tabelle'

    Ich sehe keinen Denkfehler.

    P.S.: geht eigtl auch SELECT COUNT(spalte1) FROM tabelle WHERE spalte1=1?

    Geht auch.

    d.h. ich möchte alle Datensätze der Datenbank zählen, die in spalte1 eine 1 haben...

    Schon klar.

    Schoene Weihnachten!

    1. Hi,

      Datenbank-Konnekt besteht. Fehlermeldung keine.
      Doch ich habe jetzt das Problem, dass mir
      echo mysql_num_rows($ergebnis);
      nix zurückgibt...

      wie muss ich das ganze dann holen ?

      1. Datenbank-Konnekt besteht. Fehlermeldung keine.
        Doch ich habe jetzt das Problem, dass mir
        echo mysql_num_rows($ergebnis);
        nix zurückgibt...

        wie muss ich das ganze dann holen ?

        Du musst lernen Probleme zu isolieren, in diesem Fall das Problem zu isolieren. Was klappt denn noch so zu sagen als Letztes?

        Kriegst Du mit einem SELECT eine Ergebnismenge? Falls ja, kriegst Du mit einem SELECT COUNT(*) eine Ergbernismenge?

        Wenn Du das Problem beginnst zu isolieren und mit¨dieser Isolation fortfaehrst, dann hast Du irgendwann den Punkt an dem es nicht funzt. Dann bearbeitest Du das Problem mithilfe der entsprechenden Doku oder postest hier noch einmal.

        1. Ergebnismenge kriege ich!
          also das letzte das geht ist mysql_unbuffered_query!!!

          Nur komme ich mit mysql_num_rows($erbenis) nicht an die anzahl der datensätze

          1. Ergebnismenge kriege ich!
            also das letzte das geht ist mysql_unbuffered_query!!!

            Nur komme ich mit mysql_num_rows($erbenis) nicht an die anzahl der datensätze

            Welchen Wert niommt denn ergebnis an?

            (   $ergebnis=mysql_unbuffered_query($abfrage);   )

            Vergiss erst einmal mysql_num_rows.

            1. Resource id #8

              1. Resource id #8

                Nicht ganz das was wir haben wollen, oder?

                Also, sei mal so lieb und exekutiere erst einmal ein einziges SQL-Statement erfolgreich, ich glaube das geht mit mysql_query(), bin aber nicht ganz sicher.

                1. Hi also hier mein code:
                  $abfrage='SELECT COUNT(*) FROM guestbook';
                  $ergebnis1=mysql_query($abfrage);
                  $ergebnis2=mysql_unbuffered_query($abfrage);
                  echo $ergebnis1;
                  echo $ergebnis2;

                  beidesmal wird Ressource id #8 ausgegeben, bei unbuffered noch eine Fehlermeldung, dass ich nicht vorher alle rows abgefragt habe...jetzt weiß ich auch, warum mysql_num_rows mit einem unbuffered net geht, aber was passiert da mit meinem normalen query?

                  wie komm  ich an das doofe ergebnis?

                  führe ich SELECT COUNT(*) FROM guestbook direkt in phpmyadmin aus, so kriege ich das korrekte ergebnis..

          2. Hello,

            ...ich lass euch mal weiter spielen...

            Nur komme ich mit mysql_num_rows($erbenis) nicht an die anzahl der datensätze

            dein Ziel ist mysql_num_rows == 1 -> Schau dir mal mit PHPMyAdmin an, was der Rückgabewert von SELECT COUNT(*) ist. Du wirst feststellen, es ist eine Zeile mit einer Spalte in der ein Wert drinsteht.
            Frag mich nur bitte nicht, was unbuffered am Ergebniszugriff ändern könnte.
            Wenn du mit mysql_num_rows arbeiten willst, wäre SELECT * dein Freund - eine Methode, von der allerdings extrem abzuraten ist, weil die Datenbank sinnlos die Datensätze abfragen/sperren würde.

            MfG
            Rouven

            --
            -------------------
            When the only tool you've got is a hammer, all problems start to look like nails.
  2. Moin!

    Vorraussetzungen mysql, php.

    Möchte die Anzahl aller Datensätze in einer Tabelle 'tabelle'.

    $abfrage='SELECT COUNT(spalte1) FROM tabelle';
    $ergebnis=mysql_unbuffered_query($abfrage);

    Mit SELECT COUNT kann ich doch die Datensätze zählen?

    Wenn du SELECT COUNT(*) machst, dann wendet MySQL eine extrem effiziente Abkürzung an, indem aus einer MyISAM-Datentabelle einfach die Anzahl gespeicherter Datensätze ausgelesen wird, ohne alle Datensätze durchzuzählen.

    Und mit einem unbuffered Query blaste ich doch das DBMS weniger, oder?

    Nein, hier irrst du. Ein mysql_query wird von PHP an die Datenbank geschickt, sofort ausgeführt, und der Ergebnispuffer von MySQL wird von PHP direkt abgefragt, in einen Zwischenspeicher (unter PHP-Verwaltung) geschrieben, und die Datenbank wird dann wieder freigegeben. Dieser PHP-Puffer erlaubt dann u.a. die Anwendung von diversen Funktionen (mysql_num_rows ist eine davon) auf diesen Puffer.

    Mit mysql_unbuffered_query wird die Datenbankabfrage auch sofort ausgeführt, allerdings bleiben die abgefragten Daten in einem MySQL-Puffer stehen. PHP ruft nur dann einen neuen Datensatz ab, wenn du mysql_fetch_* benutzt. Funktionen wie mysql_num_rows funktionieren in solch einer Konstellation nicht vernünftig. Außerdem wird der MySQL-Puffer erst freigegeben, wenn du die Verbindung  zur  Datenbank beendest (z.B. durch Skriptende), oder wenn du über die gleiche Verbindung einen neuen Query schickst. Ein neuer Query zerstört dir das alte Ergebnis, du kannst nicht gleichzeitig zwei unterschiedliche Querys im Puffer halten und wechselseitig mit mysql_fetch_* auslesen! Mit anderen Worten: Wende den unbuffered Query nur dann an, wenn das Resultat der Gesamtabfrage eine so große Datenmenge ergibt, dass diese den verfügbaren PHP-Speicher übersteigt. Dann mußt du jeweils nur einen einzigen Datensatz mit PHP speichern können.

    Da dein Query ja aber sowieso nur eine einzige Zahl ermitteln soll, ist deren Datenmenge ziemlich klein. Unbuffered Query ist daher absolut überflüssig.

    Doch wie komme ich jetzt an das Ergebnis?

    Wie  kommst du normalerweise an das Ergebnis einer SELECT-Abfrage (z.B. SELECT name FROM tabelle WHERE irgendwas)? Genauso  kommst du an das Ergebnis deiner nur scheinbar "spezieller" aussehenden Abfrage jetzt.

    Wo ist mein Denkfehler?

    Dein Denkfehler ist, dass du glaubst, allein durch die Abfrage per mysql_query eines COUNT würde an PHP schon irgendein Zahlenwert geliefert. Wird aber nicht. Die Anzahl deiner Datensätze ist Bestandteil eines stinknormalen Datenbankergebnisses. Und jedes Datenbankergebnis wird z.B. mit mysql_fetch_assoc abgefragt, und man erhält dann ein Array mit einem Datensatz. Da "SELECT COUNT(*) FROM tabelle" nur einen einzigen Datensatz produziert, kann man sich eine WHILE-Schleife, die solange abfragt, bis keine Daten mehr verfügbar sind, sparen.

    P.S.: geht eigtl auch SELECT COUNT(spalte1) FROM tabelle WHERE spalte1=1?
    d.h. ich möchte alle Datensätze der Datenbank zählen, die in spalte1 eine 1 haben...

    Das funktioniert auch. Wobei in diesem Fall COUNT(*) keinen extremen Geschwindigkeitsvorteil mehr hat, weil ja gefiltert werden muß.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. echo $begrüßung;

      Außerdem wird der MySQL-Puffer erst freigegeben, wenn du die Verbindung zur Datenbank beendest (z.B. durch Skriptende), oder wenn du über die gleiche Verbindung einen neuen Query schickst. Ein neuer Query zerstört dir das alte Ergebnis, du kannst nicht gleichzeitig zwei unterschiedliche Querys im Puffer halten und wechselseitig mit mysql_fetch_* auslesen!

      Kleine Korrektur: Laut PHP-Handbuch zu mysql_unbuffered_query() (unter Notes) müssen zuerst sämtliche Ergebniszeilen abgeholt werden, bevor eine neue Abfrage gesendet werden kann.

      echo "$verabschiedung $name";