Recherche
Peut être aimerez-vous...
Sections du site
Sites Neamar
Lisez ces articles !
| De l'utilisation de FIELD et ELT avec MySQL |
|
| Programmation et tuning - Programmation Web |
| Écrit par Neamar |
| Vendredi, 20 Novembre 2009 20:02 |
|
Comme souvent, l'article du jour part d'une interrogation.
Vous voyez venir le problème gros comme une maison : comment connecter ces deux jeux de données pour, par exemple, récupérer les 10 articles les plus vus ? En fait, mySQL fournit deux fonctions pour ce genre de questionnement : FIELD et ELT. À titre d'exemple, nous allons tenter de récupérer en une seule requête les 10 articles les plus lus (récupération du titre associé au nombre de vues). La fonction FIELD()Premier réflexe : consulter la documentation.
Comment expliquer cela ? En fait, FIELD() est l'équivalent de la fonction PHP array_search. Le code suivant s'impose alors : <?php //Mettre la liste des indexs à récupérer sous forme de string $Keys=implode(',',array_keys($Best)); //Génération de FIELD $Field='FIELD(ID,' . $Keys . ')'; //La requête à exécuter mysql_query('SELECT Titre FROM Articles WHERE ID IN (' . $Keys . ') ORDER BY ' . $Field); ?> Premier objectif réalisé : nous avons bien récupéré les 10 articles les plus lus, triés dans le bon sens. Nous pourrions sauter l'étape suivante en ajoutant via PHP la valeur associée à l'index, mais pourquoi ne pas profiter de la puissance de mySQL pour effectuer cette tâche ? La fonction ELT()Un nouveau passage dans la documentation s'impose :
Vous l'avez compris, ELT() fait l'inverse de FIELD : pour ID=4, on aura ELT(ID,"pos1","pos2","pos3","pos4","pos5") qui renverra "pos4". <?php //La liste des indexs à récupérer $Keys=implode(',',array_keys($Best)); //Le nombre de vues de chaque index $Values=implode(',',array_values($Best)); //Génération de FIELD $Field='FIELD(ID,' . $Keys . ')'; //Génération de ELT $Elt='ELT(' . $Field . ',' . $Values . ')'; //La requête mysql_query('SELECT Titre,' . $Elt . ' AS Vues FROM Articles WHERE ID IN (' . $Keys . ') ORDER BY ' . $Field); ?> Et voilà, le tour est joué ! Pour chaque élément, on récupère son numéro d'index dans la liste et on le couple avec la valeur associée. En quelques lignes, nous avons réussi à éviter une boucle de requêtes. Un bon résultat, non ? |
| Mise à jour le Samedi, 21 Novembre 2009 10:33 |
