Embauchez-moi

Je suis freelance ! Besoin d'un professionnel du développement web ? Pourquoi ne pas me passer un coup de fil ?

Plus d'infos sur… http://thibault.jouannic.fr

mots-cles : Ingénieur web freelance Symfony eZ Publish Solr

Une astuce MySQL

Je suis confronté à un problème bateau. Je dois concevoir un moteur de recherche sur mon site, qui utilise MySQL de façon trés classique. Je génère une bête requête de type SELECT qui me retourne des résultats.

Le souci, c’est que d’un côté, je ne veux sélectionner qu’une fraction de ces résultats pour afficher une pagination. J’utilise la trés classique clause LIMITE. D’un autre côté, je veux retourner le nombre total de réponses correspondants à la recherche, comme le fait n’importe quel moteur de recherche digne de ce nom.

Je peux le faire avec deux requêtes :

Ça marche, mais c’est moche[1]. Voici la bonne méthode :

Simple et efficace. Merci MySQL.

Notes :

  1. pas glop [retour]

2 Commentaires

  1. Posté le 23/08/2009 à 23:16 | Permalien

    Bon allez, c’est décidé, j’ajoute ce blog à mes abonnements ! Merci bien !

  2. Posté le 28/10/2009 à 23:58 | Permalien

    Oui ton idée part d’un bon sentiment, mais le problème est qu’actuellement il y a un bug de type race condition sur la fonction SQL_CALC_FOUND_ROWS.

    admettons que tu aies 2 requetes à executer. Un listing client et un listing produits, chacun avec une clause différente.
    tu lances ton 1er SQL_CLAC_FOUND_ROWS sur la table clients. Puis avant d’appeler le FOUND_ROWS tu as une requete executée sur la table produits. Le FOUND_ROWS va te retourner le nombre total de produits et non de clients comme le résultat attendu.

    Temps que cette race condition n’est pas résolue, je déconseille cette utilisation.

    @++