Schrift
[thread]3773[/thread]

SQL_CALC_FOUND_ROWS



<< >> 8 Einträge, 1 Seite
Froschpopo
 2007-02-02 15:49
#35172 #35172
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Es gibt ja das SQL_CALC_FOUND_ROWS, das LIMIT ignoriert.
Gibts da auch irgendetwas, was die komplette WHERE-Klausel ignoriert?
ich möchte gerne wissen, wieviele Rows die gesamte Tabelle hat. Kann man das vielleicht auch in das ohnehin vorhandene Statement einbauen?

z.B. irgendwie so:
Code: (dl )
SELECT SQL_CALC_FOUND_ROWS username FROM users WHERE username = 'Froschpopo'


Leider bezieht sich diese Lösung ja nur auf die Suchergebnisse.

SELECT FOUND_ROWS() ergibt hier leider nur: 1

Hat noch jemand eine Idee? Ich traue mySQL zu, dass es auch hierfür bereits eine Lösung gibt ohne dass man eine weitere Abfrage machen muss.
nepos
 2007-02-02 16:13
#35173 #35173
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
MySQL ist recht fix, wenn du einfach
Code: (dl )
SELECT Count(*) FROM users
machst.
Wenn du da immer nur nach bestimmten Usern suchen möchtest, dann könnte es hilfreich sein, auf die username-Spalte einen Index anzulegen.

Ach ja, ich würde auch nicht zuviel von diesen MySQL-Besonderheiten nutzen. Wenn du das mal auf eine andere Datenbank portieren willst, dann Mahlzeit...
pq
 2007-02-02 17:55
#35174 #35174
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=nepos,02.02.2007, 15:13]Ach ja, ich würde auch nicht zuviel von diesen MySQL-Besonderheiten nutzen. Wenn du das mal auf eine andere Datenbank portieren willst, dann Mahlzeit...[/quote]
nun ja, SQL_CALC_FOUND_ROWS ist halt einfach sehr praktisch
und effizient. als alternative kenne ich nur ein COUNT absetzen und
dann die suche nochmal machen. damit belastest du die datebank
dann zweimal (ausser dass du beim COUNT kein ORDER BY
brauchst).
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
nepos
 2007-02-02 20:56
#35175 #35175
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Den Count zieht MySQL eh aus einer internen Tabelle. Der sollte in Nullkommanix gehen.
Drum wird der gerne immer als Argument gegen

PostgreSQL genommen, weil der da wirklich ueber die komplette Tabelle rennt...
pq
 2007-02-03 13:14
#35176 #35176
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=nepos,02.02.2007, 19:56]Den Count zieht MySQL eh aus einer internen Tabelle. Der sollte in Nullkommanix gehen.[/quote]
du meinst jetzt COUNT * ohne WHERE-bedingung. natürlich
ist der schnell (abhängig, ob MyISAM oder InnoDB).
wir waren aber doch bei
SELECT SQL_CALC_FOUND_ROWS FROM ... WHERE ...
du sagtest, dass man möglichst keine MySQL-besonderheiten
benutzen sollte, ich sagte, wenn man effizient sein will, warum nicht?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
nepos
 2007-02-03 14:45
#35177 #35177
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
[quote=Froschpopo,02.02.2007, 14:49]Es gibt ja das SQL_CALC_FOUND_ROWS, das LIMIT ignoriert.
Gibts da auch irgendetwas, was die komplette WHERE-Klausel ignoriert?
ich möchte gerne wissen, wieviele Rows die gesamte Tabelle hat.[/quote]

Froschpopo will doch alle Zeilen in der Tabelle. Er sucht ja was, das die WHERE-Klausel nicht mit in Betracht zieht...\n\n

<!--EDIT|nepos|1170506926-->
pq
 2007-02-03 16:21
#35178 #35178
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=nepos,03.02.2007, 13:45]Froschpopo will doch alle Zeilen in der Tabelle. Er sucht ja was, das die WHERE-Klausel nicht mit in Betracht zieht...[/quote]
ich weiss, aber dein einwand gegen SQL_CALC_FOUND_ROWS war
generell. zumindest habe ich das so verstanden. nochmal: wir
sind uns einig, dass ein SELECT COUNT(*) from table das
schnellste ist, wenn man alle zeilen haben will. das habe ich niemals angezweifelt.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Froschpopo
 2007-02-03 18:09
#35179 #35179
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Also würde ich alle Rows (ohne WHERE) einer Tabelle haben wollen, könnte ich mir ja SQL_CALC_FOUND_ROWS gleich sparen.
Ich wende SQL_CALC_FOUND_ROWS auf die _Ergebnistabelle_ an. Und das, weil ich wissen möchte, wieviele Ergebnisse insgesamt habe! Ein faches COUNT() wird ja durch LIMIT geblockt, bzw wird nur bis zur in Limit als Maximalwert festgelegter Grenze gezählt.
Es wird also nicht einfach ein COUNT()-Wert abgefragt, sondern es muss erst eine Ergebnistabelle generiert werden, bevor ich diese dann abzählen kann.\n\n

<!--EDIT|Froschpopo|1170519033-->
<< >> 8 Einträge, 1 Seite



View all threads created 2007-02-02 15:49.