Thread SQL_CALC_FOUND_ROWS() (18 answers)
Opened by Froschpopo at 2007-05-13 21:14

Froschpopo
 2007-05-14 13:42
#35481 #35481
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
das hab ich doch alles schonmal gesagt. Ich möchte wissen, wieviele Suchergebnisse diese Abfrage liefert:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SELECT
b.id AS file_id,
a.id,
a.name,
IF(sessions.userid IS NOT NULL, '1','0') AS status

FROM defaultusers a

LEFT JOIN sessions ON
a.id = sessions.userid

INNER JOIN photos b ON
b.id = (SELECT MAX(datestamp) FROM photos WHERE user_id = a.id)

INNER JOIN defaultusers c ON c.id = 39212

WHERE
a.status = 'N' and
a.sex = 'w' and
YEAR(CURDATE())-YEAR(a.birthday) <= 30 and
YEAR(CURDATE())-YEAR(a.birthday) >= 16 and
(ACOS((SIN(RADIANS(c.lat))*SIN(RADIANS(a.lat))) + (COS(RADIANS(c.lat))*COS(RADIANS(a.lat))*COS(RADIANS(a.lon)-RADIANS(c.lon)))) * 6378.388) <= 50

ORDER BY a.lastlogin DESC
LIMIT 0,10;


Das kann ich ohne SQL_CALC_FOUND_ROWS nur herausbekommen, wenn ich dieselbe Abfrage mache, nur mit einem COUNT(), anstatt eine Ergebnistabelle zu erstellen.

Das geht nur so:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT
COUNT(a.id)

FROM defaultusers a

INNER JOIN photos b ON
b.id = (SELECT MAX(datestamp) FROM photos WHERE user_id = a.id)

INNER JOIN defaultusers c ON c.id = 39212

WHERE
a.status = 'N' and
a.sex = 'w' and
YEAR(CURDATE())-YEAR(a.birthday) <= 30 and
YEAR(CURDATE())-YEAR(a.birthday) >= 16 and
(ACOS((SIN(RADIANS(c.lat))*SIN(RADIANS(a.lat))) + (COS(RADIANS(c.lat))*COS(RADIANS(a.lat))*COS(RADIANS(a.lon)-RADIANS(c.lon)))) * 6378.388) <= 50

ORDER BY a.lastlogin DESC
LIMIT 0,10;

daran dürfte es eigentlich nichts zu rütteln geben ;)

Cachen kann ich die Daten nur mit erheblich großem Aufwand, denn zwischenzeitlich kann sich "photos" auch schon wieder geändert haben, Stichwort: "Bad Links"

"Fast so lang" bedeutet immerhin noch 14 Sekunden und das ist einfach zu lang.\n\n

<!--EDIT|Froschpopo|1179135801-->

View full thread SQL_CALC_FOUND_ROWS()