Bla: SQL-Abfrage die nur einen Wert zurückgeben kann

Hallo!

Hoffe die Frage ist jetzt nicht blöd aber wie verarbeitet man z.B. eine Count-Abfrage die ja nur einen Wert zurückgeben kann. Also z.B. select count(id) from table?

Natürlich kann ich mir mit mysql_fetch_row, mysql_result o.Ä. den Inhalt der ersten Spalte der ersten Row ausgeben lassen aber trotzdem habe ich da immer eine Ergebnismenge (auch wenn sie in diesem Fall nur einen einzelnen Wert enthält). Geht das nicht irgendwie besser und effizienter?

Danke!

  1. Tach!

    Hoffe die Frage ist jetzt nicht blöd aber wie verarbeitet man z.B. eine Count-Abfrage die ja nur einen Wert zurückgeben kann. Also z.B. select count(id) from table?

    Natürlich kann ich mir mit mysql_fetch_row, mysql_result o.Ä. den Inhalt der ersten Spalte der ersten Row ausgeben lassen aber trotzdem habe ich da immer eine Ergebnismenge (auch wenn sie in diesem Fall nur einen einzelnen Wert enthält). Geht das nicht irgendwie besser und effizienter?

    Die Frage lässt sich allgemein mit dieser Gegenfrage beantworten: Findest du eine Funktion, die einzelne Werte aus der Ergebnismenge liefern kann? Nun, die Antwort lautet: nicht bei der mysql-Extension, bedingt bei der mysqli-Extension (mysqli_fetch_all()) und ja bei PDO.

    dedlfix.

    1. Die Frage lässt sich allgemein mit dieser Gegenfrage beantworten: Findest du eine Funktion, die einzelne Werte aus der Ergebnismenge liefern kann? Nun, die Antwort lautet: nicht bei der mysql-Extension, bedingt bei der mysqli-Extension (mysqli_fetch_all()) und ja bei PDO.

      Hm... Einen einzelnen Werte aus der Ergebnismenge(SQL-Abfrage) kann ich mir ja jederzeit entsprechend zurückgeben lassen. Ich will aber gar keine Ergebnismenge sondern ein einzelnes Ergebnis. So etwas wie ExecuteScalar unter .net . Wenn ich dich richtig verstanden habe gibt es das aber bei der mysql-Extension nicht. Auch egal.

      Danke jedenfalls!

      1. Tach!

        Hm... Einen einzelnen Werte aus der Ergebnismenge(SQL-Abfrage) kann ich mir ja jederzeit entsprechend zurückgeben lassen. Ich will aber gar keine Ergebnismenge sondern ein einzelnes Ergebnis. So etwas wie ExecuteScalar unter .net .

        Schau dir mal an, was .NETs SqlCommand.ExecuteScalar() macht. Auch nichts weiter, als von der Ergebnismenge einen Datensatz lesen und davon den ersten Wert zurückgeben.

        Wenn ich dich richtig verstanden habe gibt es das aber bei der mysql-Extension nicht.

        Nun, PHP selbst bietet eine solche Funktionalität für mysql nicht an. Das heißt nicht, dass man darauf verzichten muss. Man kann sich eine entsprechende Funktion sehr einfach selbst schreiben. Und dann gibt es da noch eine Menge Datenbankabstraktionen, die diverse Komfortfunktionen nicht nur für das Fetchen mitbringen.

        dedlfix.

        1. Nun, PHP selbst bietet eine solche Funktionalität für mysql nicht an. Das heißt nicht, dass man darauf verzichten muss. Man kann sich eine entsprechende Funktion sehr einfach selbst schreiben. Und dann gibt es da noch eine Menge Datenbankabstraktionen, die diverse Komfortfunktionen nicht nur für das Fetchen mitbringen.

          Danke für deine Antwort. Eigene Funktion sollte kein Problem sein. Wollte nur sicherstellen, dass ich da nichts übersehen habe!

  2. Hallo!

    du hast deinen Anwendungsfall nicht verraten.

    Manchmal möchte man mit LIMIT eine Teilmenge haben, aber die Gesamtzahl der selectierten Sätze wissen:

    SELECT
     SQL_CALC_FOUND_ROWS
     adr1.id
    ,adr1.name
    ...
    FROM ...

    SELECT FOUND_ROWS()

    Nach dem zweiten Select musst du auch mit mysql_fetch_array zugreifen, aber du belastest die DB nicht extra mit einem Zählauftag.

    Linuchs