Totaal ophalen bij het gebruik van limit

Door 5 februari 2013Tips & Trucs

Wanneer je paginering maakt op je website zal je gebruik maken van “limit” om ervoor te zorgen dat de items van de eerdere pagina’s niet weergeven worden en de items van de nog te komen pagina ook niet. Een stukje pseudo code:

SELECT
	name,image,price
FROM
	products
WHERE
	category=6
LIMIT
	20,10

Dit zorgt ervoor dat de eerste 20 producten overgeslagen worden en de volgende 10 weergegeven worden. Maar hoe komen we er nu achter hoeveel producten er totaal zijn? Hiervoor kunnen we natuurlijk de query nogmaals uitvoeren en de limit weg laten. In dit geval is dat niet een probleem, maar wat als het een grote complexe query is? Een mooie standaard om aan te houden is natuurlijk DRY, dan is dat geen optie. Gelukkig heeft MySQL ook hier wat moois voor FOUND_ROWS()! Wanneer we dit toepassen zal onze query er zo uit zien:

SELECT SQL_CALC_FOUND_ROWS
	name,image,price
FROM
	products
WHERE
	category=6
LIMIT
	20,10

Maar het resultaat is het zelfde? Dat klopt want hierna dienen we een tweede query te versturen welke het totaal gaat ophalen:

SELECT FOUND_ROWS()

Deze tweede query geeft het aantal gevonden items terug van de eerste query zonder de limit!