 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
14.04.2006, 00:55
|
#1
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Optimierungstipp MySQL
Wer mit Limit arbeitet, ev. noch Pagebrowser arbeitet, braucht oft die Gesamtzahl der Ergebnisse.
Ein häufiger Weg ist es, erst die Anfrage ohne Limit zu starten, die Anzahl zu speichern und dann die Anfrage mit Limit zu nehmen für die Ausgabe.
Es gibt noch einen effizienteren Weg, den ich genial finde:
SQL_CALC_FOUND_ROWS
http://www.phpbuilder.com/annotate/m...hp3?id=1009619
|
|
|
14.04.2006, 10:15
|
#2
|
|
TP-Supporter
Registriert seit: Dec 2005
|
Hi,
danke für den coolen Tipp 
Hast Du damit schon Erfahrungen gemacht bzw Benchmarks oder ähnliches?
Wie ist das denn, wenn ich die Queries un unterschiedlichen Funktionen habe? Beispielsweise habe ich eine Funktion, die mir die aktuelle Einträge ausliest und eine andere, die mir die gesamte Anzahl ausliest und daraus den Seiten-Blätter-Code zusammenstellt!
Müsste ja aber eigentlich trotzdem funktionieren, oder?
Edit: Was ich nicht so recht verstehe! Das ganze ist ja schon sehr alt. Warum wird das nicht in allen Foren / Tutorials / Büchern empfohlen? Irgendwie muss das Teil doch Nachteile haben 
Geändert von [jacky] (14.04.2006 um 10:17 Uhr).
|
|
|
14.04.2006, 10:47
|
#3
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Die Nachteile - es klappt erst ab einer Version von MySQL ...
Warum es selten empfohlen wird ? Wahrscheinlich weil es gar nicht viele kennen und weil es MySQL-spezifisch ist.
Wo man das einsetzt ist völlig egal, einfach als ersten Parameter mit angeben. Natürlich macht es erst Sinn mit einer LIMIT-Abfrage.
|
|
|
14.04.2006, 10:58
|
#4
|
|
TP-Supporter
Registriert seit: Dec 2005
|
ja, das mit Limit ist klar! Ab welcher MySQL Funktion ist dies denn implementiert? Auf MySQL 4 sollte das schon laufen, oder? 
|
|
|
14.04.2006, 11:04
|
#5
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
soweit ich weiss, funktioniert es ab Version 3.23, aber ab Version 4.1 ist wohl ein Bug damit behoben, damit auch die korrekte Anzahl geliefert wird. ich kann aber nicht genau sagen, in welcher Konstellation der Bug griff.
|
|
|
14.04.2006, 11:15
|
#6
|
|
TP-Member
Registriert seit: Apr 2005
Ort: Oberbayern
|
Hi,
super Tipp - danke Dir! :-)
Flo
|
|
|
14.04.2006, 13:22
|
#7
|
|
TP-Supporter
Registriert seit: Dec 2005
|
So, habe noch ein wenig bei Google gesucht, und bin auf das php Manual gestoßen:
Code:
I find that mysql_num_rows() overlook LIMIT clauses.
For instance:
//table has 700 rows
$command = "SELECT * FROM table LIMIT 500";
$q = mysql_query($command);
$rows = mysql_num_rows($q);
//$rows is 700
( http://php3.de/mysql-num-rows 5.Kommentar von oben)
Ist das dann nicht die selbe Funktion?
|
|
|
14.04.2006, 14:03
|
#8
|
|
TP-Member
Registriert seit: Apr 2005
Ort: Oberbayern
|
|
|
|
14.04.2006, 14:09
|
#9
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
Flo hat Recht
PHP-Code:
//table has 700 rows
$command = "SELECT * FROM table LIMIT 500";
$q = mysql_query($command);
$rows = mysql_num_rows($q);
//$rows liefert 500
$command = "SELECT SQL_CALC_FOUND_ROWS * FROM table LIMIT 500";
$q = mysql_query($command);
$rows = mysql_num_rows($q);
//$rows liefert 500
$q=mysql_query("Select FOUND_ROWS()");
$row=mysql_fetch_row($q);
//$row[0] liefert 700
|
|
|
14.04.2006, 14:28
|
#10
|
|
TP-Supporter
Registriert seit: Dec 2005
|
ok stimmt 
|
|
|
14.04.2006, 23:32
|
#11
|
|
TP-Supporter
Registriert seit: Dec 2005
|
hatte es eben mal bei nem einfachen query aus einer tabelle genutzt, hat geklappt  als ich das dann aber bei einem query mit 2 left joins + paar wheres genutzt habe, gings nicht mehr 
|
|
|
15.04.2006, 13:20
|
#12
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
kann ich nicht bestätigen - ich setze es auch mit joins und wheres ein und das Ergebnis stimmt.
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 11:48 Uhr.
|
 |