Anzahl Ergebnisse begrenzen, auf Seiten verteilen
jojo
- php
Hallo zusammen!
Ich möchte die Ergebnisse einer SQL Abfrage auf mehrere Seiten verteilen. Soweit kein Problem, ich stoße aber auf ein Problem:
gebe ich bei der SQL Abfrage ein LIMIT vor, weiß ich nicht, wie viele DS die Abfrage insgesamt ausgeben würde - ich kann also keine Seitenanzahl vorgeben. Außer ich mache die Abfrage zweimal. Da sie sehr umfangreich ist, halte ich das für unsinnig: würde die LAdezeit nur verlängern...
gebe ich kein LIMIT vor, weiß ich zwar, wie viele DS vorhanden sind und kann diese dann per PHP auf die gewünschte Anzahl kürzen; dann würde allerdings auf jeder seite die komplette DB abgefragt werden, was nicht nötig ist...
Wie gehe ich vor, wenn ich als erstes die Anzahl der Ergebnisse haben möchte, um damit die Anzahl der Seiten vorzugeben, ohne die Abfrage zweimal zui machen?
Viele Grüße
echo $begrüßung;
- gebe ich bei der SQL Abfrage ein LIMIT vor, weiß ich nicht, wie viele DS die Abfrage insgesamt ausgeben würde - ich kann also keine Seitenanzahl vorgeben. Außer ich mache die Abfrage zweimal. Da sie sehr umfangreich ist, halte ich das für unsinnig: würde die LAdezeit nur verlängern...
Es gibt SQL_CALC_FOUND_ROWS und FOUND_ROWS().
echo "$verabschiedung $name";
Es gibt SQL_CALC_FOUND_ROWS und FOUND_ROWS().
Super! Danke für den Link!! ;-)
Hello,
- gebe ich bei der SQL Abfrage ein LIMIT vor, weiß ich nicht, wie viele DS die Abfrage insgesamt ausgeben würde - ich kann also keine Seitenanzahl vorgeben. Außer ich mache die Abfrage zweimal. Da sie sehr umfangreich ist, halte ich das für unsinnig: würde die LAdezeit nur verlängern...
Es gibt SQL_CALC_FOUND_ROWS und FOUND_ROWS().
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
mysql> SELECT FOUND_ROWS();
Funktioniert das pro Verbindung, also so ähnlich, wie last_insert_id()?
Ein neues Select würde das Ergebnis zerstören?
Oder nur ein Select, das SQL_CALC_FOUND_ROWS enthält?
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hey,
irgendwie komme ich nicht weiter. Wie bekomme ich nun die Anzahl der DS? So geht es nicht: echo 'found: '.mysql_query("SELECT FOUND_ROWS()");
Danke!
Hello,
irgendwie komme ich nicht weiter. Wie bekomme ich nun die Anzahl der DS? So geht es nicht: echo 'found: '.mysql_query("SELECT FOUND_ROWS()");
$res = mysql_query("SELECT FOUND_ROWS()", $connection);
if ($res)
{
$found = mysql_result($res,0);
}
else
{
## Fehlerbehandlung, keine Anzahl zurückgemeldet
}
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
$sql = "SELECT SQL_CALC_FOUND_ROWS *
FROM table...";
$res = mysql_query("SELECT FOUND_ROWS()");
$found = mysql_result($res,0);
echo $found;
Gibt mir bei echo $found; immer 0 aus, obwohl 101 Sätze gefunden werden müssten... Die Abfrage funktioniert aber einwandfrei.
Habe gerade noch folgendes gelesen, was ich nicht verstehe:
Die mit FOUND_ROWS() ermittelte Anzahl der Datensätze ist flüchtig und sollte nicht über die der SELECT SQL_CALC_FOUND_ROWS-Anweisung nachfolgende Anweisung hinaus verfügbar bleiben. Wenn Sie den Wert später noch einmal benötigen sollten, dann sollten Sie ihn speichern:
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM ... ;
mysql> SET @rows = FOUND_ROWS();
Ich benötige die Zahl später noch, aber was bedeutet SET @rows = FOUND_ROWS(); und wie arbeite ich damit in PHP?
Danke für Eure Hilfe!
Hello,
$sql = "SELECT SQL_CALC_FOUND_ROWS *
FROM table...";
$res1 = mysql_query($sql. $con);
if ($res1)
{
$res2 = mysql_query("SELECT FOUND_ROWS()", $con);
if ($res2)
{
$found = mysql_result($res,0);
echo "Treffer insgesamt: $found";
}
else
{
echo "Fehler bei der Trefferermittlung";
}
}
>
> Gibt mir bei echo $found; immer 0 aus, obwohl 101 Sätze gefunden werden müssten... Die Abfrage funktioniert aber einwandfrei.
Kein Wunder, wenn Du das eigentliche Query gar nicht in Auftrag gibst!
Und vergiss die Abfrage des Erfolges Deiner Queries nicht! Die Prüfung auf $res gehört immer dazu!
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>
if ($res1)
{
$res2 = mysql_query("SELECT FOUND_ROWS()", $con);if ($res2)
{
$found = mysql_result($res2,0);
echo "Treffer insgesamt: $found";
}
else
{
echo "Fehler bei der Trefferermittlung";
}
}
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Kein Wunder, wenn Du das eigentliche Query gar nicht in Auftrag gibst!
Wie du siehst, blicke ich nicht richtig durch! ;-)
Aber jetzt hats funktioniert, vielen Dank!
$res1 = mysql_query($sql);
if ($res1) {
$res2 = mysql_query("SELECT FOUND_ROWS()");
if ($res2) {
$found = mysql_result($res2,0);
echo "Treffer insgesamt: $found";
} else {
echo "Fehler bei der Trefferermittlung";
}
}
Liebe Grüße
echo $begrüßung;
irgendwie komme ich nicht weiter. Wie bekomme ich nun die Anzahl der DS? So geht es nicht: echo 'found: '.mysql_query("SELECT FOUND_ROWS()");
Das Ergebnis eines SELECT-Statements muss immer mit den üblichen Fetch-Funktionen abgeholt werden. Die Funktion FOUND_ROWS() macht da keine Ausnahme.
echo "$verabschiedung $name";
echo $begrüßung;
Keine deiner Fragen wurden nicht mit der verlinkten Handbuchseite beantwortet.
Funktioniert das pro Verbindung, also so ähnlich, wie last_insert_id()?
Natürlich. Werte anderer Verbindungen wären unsinnig.
Ein neues Select würde das Ergebnis zerstören?
Oder nur ein Select, das SQL_CALC_FOUND_ROWS enthält?
FOUND_ROWS() liefert immer die Anzahl der Datensätze des vorangegangenen erfolgreichen SELECT-Statements. Wenn dies SQL_CALC_FOUND_ROWS und LIMIT enthält dann die der unlimitierten.
echo "$verabschiedung $name";
Moin,
vielleicht bietet die verwendete Datenbank etwas entsprechendes.
In MySQL gibt es z.B. SQL_CALC_FOUND_ROWS.
Damit hast Du zwar immer noch zwei SQL-Statements, es ist aber je nach Komplexität des Query und Größe der Datenbasis effizienter als ein weiter Durchgang mit count(*).
Viele Grüße
Stefan