J'ai une table de données qui est consultable et triable, mais susceptible de produire des centaines ou des milliers de résultats pour des recherches larges. En supposant que les recherches des utilisateurs pour « foo » et trie les foos dans l'ordre décroissant de prix que je voudrais montrer un menu de sélection rapide saut comme ceci:comment tirer et afficher les données de plage (min-max) pour chaque page en pagination?
<option value="1">Page 1 ($25,000,000 - $1,625,000)</option>
<option value="2">Page 2 ($1,600,000 - $1,095,000)</option>
<option value="3">Page 3 ($1,095,000 - $815,000)</option>
<option value="4">Page 4 ($799,900 - $699,000)</option>
...
Y at-il un moyen efficace d'interroger ces informations directement à partir la DB? J'ai saisi tous les enregistrements correspondants et utilisé PHP pour calculer la valeur min et max pour chaque page qui semble inefficace et susceptible de causer des problèmes de mise à l'échelle. La seule technique que j'ai pu trouver est une façon d'avoir une variable calculée qui incrémente tous les enregistrements X (enregistrements X sur une page), en les regroupant et en sélectionnant MIN/MAX pour chaque page regroupement ... malheureusement, je n'ai pas réussi à trouver un moyen de générer cette variable.
Ouais c'est essentiellement la conclusion à laquelle je venais aussi ... Je ne savais pas s'il me manquait quelque chose d'intelligent qui ferait que ça marche bien. FWIW Je connais LIMIT/OFFSET dans les requêtes et la seule raison pour laquelle il n'est pas utilisé est parce que nous devions regarder chaque ligne du résultat en php pour construire le min/max par page de toute façon. Cela soulève cependant une autre question ... si MySQL doit de toute façon regarder les premières X pour les compenser, est-ce bien pire de tout retourner à chaque fois et de parcourir l'ensemble en PHP? –
@Ty: Oui. Tout ce que PHP fait, MySQL (C) fait 10-100x plus vite. – hobodave
@Ty: ressource d'optimisation de la pagination: http://www.percona.com/ppc2009/PPC2009_mysql_pagination.pdf – hobodave