Markus Trusk: /PERL Reihen zählen, + jüngste Reihe ausgeben?

Hi,
In will aus einer Tabelle die Reihen zählen, die ein bestimmtes Kriterium erfüllen, und dann aus dem aktuellsten Datensatz die Daten auslesen.
Einerseits könnte ich mit

my $countpost = $dbh->prepare("SELECT COUNT(*) FROM antworten WHERE postid = ?") or die $dbh->errstr;
           $countpost->execute($postid);
        my $rows = $countpost->rows;
           $countpost->finish;

die Zeilen zählen.
Natürlich könnte ich auch alle Daten komplett einlesen (mit ORDER BY timestamp), einen Zählen mitlaufen lassen, und den ersten Wert ausgeben lassen. Wenn der Zähler fertig ist, schreibe ich den gezählten Wert dazu (=die Anzahl der Treffer, die ich ja auch suche), aber das scheint mir ein wenig gefrickelt zu sein. Ich kenne zwar den LIMIT Befehl (Wie heißt es denn eigentlich bei SQL -> Befehl?), aber dann weiß ich wiederum nicht die Anzahl der Reihen? Kennt jemand eine effiziente Lösung?

Markus Trusk.

  1. Hallo Markus,

    bin nicht sicher, ob ich das jetzt tatsächlich richtig verstanden habe, aber ich denke, Du suchst nach mysql_num_rows(). Diese MySQL-Funktion gibt Dir die Anzahl der Reihen aus.

    Hier ein Link zur  MySQL-Dokumentation
    http://www.mysql.de/doc/de/mysql_num_rows.html

    Hoffe, dass das vielleicht weiterhilft.

    Grüße,

    dani

    1. Hi,
      wie ich die Zeilen herausfinden kann weiß ich, aber ich möchte gleichzeitig wissen, welche Werte die jüngste Zeile hat, ohne das ich jetzt 2 verschiedene Operationen ausführen muss.

      Markus Trusk.

      1. Hallo Markus,

        und wenn Du mit einer fußgesteuerten Schleife arbeitest, die genau 1 x durchlaufen wird? Und den SQL-Befehl mit einem ORDER BY machst, dann hättest Du die Anzahl der Zeilen und die Werte des jüngsten Datensatzes .

        So ungefähr:
        SQL = "SELECT ... ORDER BY timestamp;"
        Anzahl ausgeben/merken
        do
        {
          1. Datensatz auslesen
        }
        while(false)  // -> Schleife verlassen

        Bleibt die Frage offen, ob das jetzt genauso ein zusammengebastel für Dich ist, wie Deine Lösung? *g*

        dani

        1. So ungefähr:
          SQL = "SELECT ... ORDER BY timestamp;"
          Anzahl ausgeben/merken
          do
          {
            1. Datensatz auslesen
          }
          while(false)  // -> Schleife verlassen

          Bleibt die Frage offen, ob das jetzt genauso ein zusammengebastel für Dich ist, wie Deine Lösung? *g*

          Was er ja vermeiden will, ist das er alle Datensätze liest (was man in deinem Falle ja tut) um die Anzahl der datensätz zu erhalten.

          Soweit ich weiß bleibt dir nur die Möglichkeit über 2 abfragen

          Also einmal die anzahl:
          my $countpost = $dbh->prepare("SELECT COUNT(postid) FROM antworten WHERE postid = ?");

          und dann den letzten Datensatz:
          $dbh->prepare("SELECT * FROM antworten WHERE postid = ? ORDER BY timestamp LIMIT 1");

          Struppi.

          1. Hallo Struppi,

            soweit ich das verstanden hatte, wollte er ja auch 2 Abfragen vermeiden.
            Aber ich denke, da kommt er so nicht drumrum. Oder kann man da was mit einer verschachtelten SQL-Abfrage machen? *mal_nachdenken_werd* :-)

            Grüßle,

            dani