Bernd: SELECT Anfrage, Check ob Query-Ergebnis leer

Hallo,
gibt es eine einfache Methode herauszufinden, ob das Ergebnis von mysql_query("SELECT * FROM test"); einen Wert aus der Tabelle geliefert hat. Das wäre sehr nütztlich wenn eine Tabelle leer ist.

mfg Bernd

  1. Hallo,
    gibt es eine einfache Methode herauszufinden, ob das Ergebnis von mysql_query("SELECT * FROM test"); einen Wert aus der Tabelle geliefert hat. Das wäre sehr nütztlich wenn eine Tabelle leer ist.

    jop gibt es!
    du kannst ja mit mysql_affected_rows(DBkennung) testen wieviele datensätze zurückgeliefert werden!

    besser ist jedoch:

    $query= "SELECT Count(*) AS 'Flag' FROM test";
    $result_db= mysql_query($query);
    $result= mysql_fetch_array($result_db);
    if ((int)$result['Flag']==0)
    what ever .....

    damit werden nicht alle datensätze gesucht sondern nur die summe!

    1. Hi,
      erst mal dank für die schnelle Antwort.
      Was ist den an der zweiten Lösung besser? Wie sieht's aus mit der Performance.

      mfg Bernd

    2. Hello,

      gibt es eine einfache Methode herauszufinden, ob das Ergebnis von mysql_query("SELECT * FROM test"); einen Wert aus der Tabelle geliefert hat. Das wäre sehr nütztlich wenn eine Tabelle leer ist.

      jop gibt es!
      du kannst ja mit mysql_affected_rows(DBkennung) testen wieviele datensätze zurückgeliefert werden!

      Nein. Das ist falsch. die "affected rows" sind die betroffenen Zeilen, in denen eine Änderung vorgenommen wurde. Wenn MySQL dann mal irgendwann bugfree sein wird, wird das auch einheitlich so gehandhabt werden.

      Was hier abgefragt werden kann, ist 'mysql_num_rows($result)'

      besser ist jedoch:

      $query= "SELECT Count(*) AS 'Flag' FROM test";

      Man sollte Variablennamen immer so wählen, dass sie nicht verwirren. Ein 'Flag' ist ein Bitmerker, also keine Zahl. Die Idee an sich, erst mit

      select count(*) as number from from $table where $filter

      nachzufragen, wie groß die Antwortmenge werden wird, ist bei häufigem Umgang mit großen Datenmengen sogar sehr gut. Das eigentliche Statement führt man dann nur aus, wenn die vorgegebene Maximalzahl  von Antworten nicht überschritten wird. Anderenfalls muss eben das Filter strammer formuliert werden.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Hi,
        ich werde das mit dem Flag mal ausprobieren.

        Gruß Bernd

        1. Hello,

          ich werde das mit dem Flag mal ausprobieren.

          **grins**

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
      2. yo,

        nachzufragen, wie groß die Antwortmenge werden wird, ist bei häufigem Umgang mit großen Datenmengen sogar sehr gut. Das eigentliche Statement führt man dann nur aus, wenn die vorgegebene Maximalzahl  von Antworten nicht überschritten wird. Anderenfalls muss eben das Filter strammer formuliert werden.

        das ist eine sehr schlechte methode, da die zeit für die abarbeitung einer query nicht unbedinkt mit der anzahl der ergebnisliste zusammenhängt. so kann eine query durchaus wenige ergebnisee zurück liefern, aber wesentlich länger dauern, als eine query mit vielen ergebnissen. in deinem falle würde dann die lange ausgeführt werden und die kurze abgehlehnt.

        Ilja

        1. Hello,

          nachzufragen, wie groß die Antwortmenge werden wird, ist bei häufigem Umgang mit großen Datenmengen sogar sehr gut. Das eigentliche Statement führt man dann nur aus, wenn die vorgegebene Maximalzahl  von Antworten nicht überschritten wird. Anderenfalls muss eben das Filter strammer formuliert werden.

          das ist eine sehr schlechte methode, da die zeit für die abarbeitung einer query nicht unbedinkt mit der anzahl der ergebnisliste zusammenhängt. so kann eine query durchaus wenige ergebnisee zurück liefern, aber wesentlich länger dauern, als eine query mit vielen ergebnissen. in deinem falle würde dann die lange ausgeführt werden und die kurze abgehlehnt.

          Dagegen ist auch nicht unbedingt was einzuwenden. Wie lange ein Query dauert, hängt schließlich auch von dessen Komplexität ab. Trotzdem muss man weder ein Query über '*' absetzen, wenn man nur zwei Spalten benötigt noch über alle Zeilen, wenn man ein Filter festlegen kann und/oder sowieso nur eine bestimmte Anzahl Datensätze an den Client ausliefern kann. Eine Ergenisliste mit 10.000 Zeilen in valides HTML zu verwandeln und über HTTP auszuliefern, kostet den (PHP-)Server viel Kraft.

          Man sollte also sowohl die Feldliste klien halten, als auch mit einem 'LIMIT $offset,$limit'  (MySQL ist da wirklich komfortabel) arbeiten.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau