MySQL Trefferanzahl und ersten 10 Ergebnisse anzeigen
burpy
- datenbank
Hallo,
ich möchte aus einer Tabelle mit 100 000 Datensätzen bestimmte Daten heraussuchen und jeweils die ersten 10 Datensätze anzeigen lassen.
Gleichzeitig soll auch angezeigt werden, wieviele Treffer insgesamt gefunden wurden, auch wenn alles über 10 Datensätze erstmal nicht angezeigt wird.
Ich mache das derzeit mit zwei MySQL-Querys in PHP (siehe unten), aber kann man das nicht auch mit einem Query machen, mit dem es schneller gehen würde?
<?php
$zahl = mysql_query("SELECT COUNT(nr) FROM tabelle WHERE feld='1'");
$treffer = mysql_fetch_array($zahl);
$treffer = $treffer["COUNT(nr)"];
echo $treffer." gefunden<br>";
$id = mysql_query("SELECT * FROM tabelle WHERE feld='1' LIMIT 0,10");
while ($zeile = mysql_fetch_array($id)) {
echo $zeile["feld2"];
}
?>
Vielen Dank für alle Anregungen.
Jan
Hello Jan,
ich möchte aus einer Tabelle mit 100 000 Datensätzen bestimmte Daten heraussuchen und jeweils die ersten 10 Datensätze anzeigen lassen.
Gleichzeitig soll auch angezeigt werden, wieviele Treffer insgesamt gefunden wurden, auch wenn alles über 10 Datensätze erstmal nicht angezeigt wird.
Ich mache das derzeit mit zwei MySQL-Querys in PHP (siehe unten), aber kann man das nicht auch mit einem Query machen, mit dem es schneller gehen würde?
Nein. Das geht nicht einfacher. Und es ist in dynamischen Datenbeständen noch nicht einmal sicher, dass die im ersten Query gezählten Treffer im zweiten noch alle da sind oder aber ob welche hinzugekommen sind.
Das würde also sogar bedeuten, dass man beim Blättern von Seite zu Seite wieder zwei Queries benötigt, um dem User ein einigermaßen ehrliches Ergebnis anzuzeigen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo burpy,
die ersten 10 Datensätze
wieviele Treffer insgesamt
<?php
$result = mysql_query("SELECT * FROM tabelle WHERE feld='1'");
$treffer = mysql_fetch_array($result);
$count = count($treffer);
echo $count." gefunden<br>";
for ($i=0;$i<10;$i++){
echo $treffer[$i]["feld2"];
}
?>
freundl. Grüße aus Berlin, Raik
Hallo Raik
<?php
$result = mysql_query("SELECT * FROM tabelle WHERE feld='1'");
$treffer = mysql_fetch_array($result);
$count = count($treffer);
echo $count." gefunden<br>";
for ($i=0;$i<10;$i++){
echo $treffer[$i]["feld2"];
}
?>
dabei liesst er aber alle Ergebniss aus, egal, ob ich sie darstellen will. D.h. wenn ich 100000 Datensätze insgesamt habe und davon 75% in 'feld' den Wert 1 haben, dann muss ich 75000 auslesen (ohne Sie darzustellen) obwohl mich nur 10 davon interessieren.
Ciao
Jan
Hello,
dabei liesst er aber alle Ergebniss aus, egal, ob ich sie darstellen will. D.h. wenn ich 100000 Datensätze insgesamt habe und davon 75% in 'feld' den Wert 1 haben, dann muss ich 75000 auslesen (ohne Sie darzustellen) obwohl mich nur 10 davon interessieren.
Ich glaube, raik sollte Dich nur auf den Arm nehmen.
Und wenn man mysql_fetch_assoc() oder mysql_fetch_row() nicht in einer Schleife verwendet, nützt es sowieso nichts.
Ich wäre auch nicht gerne der Datenbankserver, wenn ich mit "select * from" bei 75000 Datensätzen vollgeknallt würde. Wieviel Bytes hat bei Dir ein Datensatz?
Und das Script könnte das so schon gar nicht verkraften.
Übrigens, da fällt mir ein, dass Du nach dem ersten Statement und Abfragen des Count(*)-Ergebnisses unbedingt mysql_free_result($res) verwenden solltest. Sonst könnte es passieren, dass Dir das zweite Statement auf dem DBMS-Server ein Swap auslöst und das kostet sehr viel Zeit.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo burpy,
dabei liesst er aber alle Ergebniss aus, egal, ob ich sie darstellen will.
oops, acu so, übersehen. :-/
freundl. Grüße aus Berlin, Raik
Hello Raik,
die ersten 10 Datensätze
wieviele Treffer insgesamt<?php
$result = mysql_query("SELECT * FROM tabelle WHERE feld='1'");
$treffer = mysql_fetch_array($result);
$count = count($treffer);
echo $count." gefunden<br>";
for ($i=0;$i<10;$i++){ ##? und was hattest Du da vor, du Schelm?
echo $treffer[$i]["feld2"]; }
?>
Du sollst doch die Leute nicht immer auf den Arm nehmen. *gg*
Er wollte doch nicht die Anzahl der Felder im Datensatz, sondern die Anzahl der Treffer für das Filterkriterium wissen.
und mysql_fetch_array($result) ist auch ein Performance-Killer, wenn man nur ein assoziatives Array benötigt, braucht man das indizierte nicht mit aufbauen zu lassen:
Besser wäre dann also mysql_fetch_assoc($result)
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Tom,
Er wollte doch nicht die Anzahl der Felder im Datensatz, sondern die Anzahl der Treffer für das Filterkriterium wissen.
man sollte halt richtig lesen können ... :-/
freundl. Grüße aus Berlin, Raik