das hab ich doch alles schonmal gesagt. Ich möchte wissen, wieviele Suchergebnisse diese Abfrage liefert:
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:
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-->