ugrás a tartalomhoz

Lekérdezés utáni sorok száma LIMIT esetén

world-s · 2008. Május. 28. (Sze), 22.35
Sziasztok.

Van egy SELECT-em ami mondjuk a termékeket listázza ki.
(elég bonyolult lassú lekérdezés...)

Ha a találatokat oldalakra szeretném bontani, akkor ugye LIMIT-el korlátozom.
Viszont szükségem lenne arra is, hogy összesen hány találat lenne az adott feltétel szerint.
Adodb-t használok, és a találatok számát le is tudom kérdezni könnyen:
$result->NumRows();

Viszont ha a LIMIT 0,10 szerepel, akkor nem azt kapom, hogy 2000 találat van, hanem a LIMIT korlátozás szerint hány találatot kaptam. (pl. 10).

Hogy tudnám lekérdezni az összes találatszámot COUNT az az SQL újbóli lefuttatása nélkül?

Találtam valami FOUND_ROWS-t de ott mi biztosítja, hogy valóban annak a SELECT-nek a sorainak a számát kapom aminek szeretném?
(Nem egy másik szál eredményét...)


Előre is kösz.
Üdv:
Zoli
 
1

session safe

Hodicska Gergely · 2008. Május. 28. (Sze), 23.41
Találtam valami FOUND_ROWS-t de ott mi biztosítja, hogy valóban annak a SELECT-nek a sorainak a számát kapom aminek szeretném?
A MySQL fejlesztői, szerencsére jó fejek. ;) Az ilyen parancsok általában úgy vannak kitalálva, hogy mindig az adott sessionre vonatkoznak, lásd last_insert_id és társai.


Üdv,
Felhő
2

Köszi

world-s · 2008. Május. 29. (Cs), 00.03
Köszi hogy itt is kisegítettél.

Akkor ezek után rendszeresen használom ha az én sessionomra vonatkozik csak.... ;)

Jól gondolom itt nem a PHP sessionra kell gondolni, hanem az SQL kapcsolatra.
Tehát ha gyorsan 3x rányom az ügyfél a frissítésre (PHP szerint ugyanaz a session), akkor sem keverednek össze a hatáskörök gondolom.

Üdv:
Zoli
3

sql sessionra

Thom · 2008. Május. 29. (Cs), 05.57
Köszi én is, régóta hiányzott már ez a lehetőség, nem tudtam róla.
Most próbálgattam, igen, az sql sessionra - azaz az előző lekérdezésre vonatkozik, kb úgy, mint az mysql_insert_id(). És működik a mysql 4.1-ben is.

Egy példa query az archívum kedvéért:

SELECT   SQL_CALC_FOUND_ROWS *
FROM     `tartalmak_tabla`
WHERE    tipus = 'kepek'
LIMIT    0, 10;

SELECT FOUND_ROWS();
Ahol a 2 selecet persze külön kérdezzü k le php-ból.
Az első az eddig megszokott eredményt adja, a 2. a LIMIT nélküli összes sorok számát.

Manual: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_found-rows