Requete 'sport' - SQL/NoSQL - Programmation
Marsh Posté le 11-03-2005 à 12:00:06
T'en est où dans ta requête ? T'as commencé ou pas ?
Déjà, retrouver une liste de mots à partir d'un champ contenant plusieurs mots, sans PS, c'est impossible, donc à moins d'avoir la dernière version de MySQL, t'es mal parti.
Faudra passer par le PHP, et bonjour la lenteur ! (déjà qu'en PS tu vas y passer la nuit à chaque requête...)
Marsh Posté le 11-03-2005 à 12:08:40
J'ai bidouillé un truc avec des tableaux PHP et le resultat fonctionne et est assez rapide, mais je trouve ça crade.
Sur mon sit c'est en fait les actus qui sont placées en haut, qui en principe representent les news avec les 2 ou 3 mots cle les plus trouvé.
Pour info j'utilise MySQL 4.0.22 et même si la requette est un peu longue ce n'est pas trop grave car le resultat est 'stocké' dans une page HTML.
Je pige pas ce que tu veux dire par PS ?
Marsh Posté le 11-03-2005 à 12:23:38
PS = Procédure Stockée
C'est une procédure/fonction crée directement dans la base de données, en utilisant un langage spécifique, tel que PL/SQL, T-SQL ou autre.
Exemple d'une PS :
Code :
|
Les avantages des PS sont divers :
1/ Plan d'éxécution déjà compilé. Ainsi, le moteur de données ne s'amuse pas à reparser la requête et chercher les index les plus intéressants pour ta requête. Ainsi, sur un bon SGBD, tu peux diminuer le temps d'éxécution des requêtes par 5 facilement.
2/ Pas d'échange de données avec un process externe à la base. Ainsi, l'occupation mémoire est très faible, et surtout, à nouveau on gagne énormément en temps, puisque les données n'ont pas à être baladées d'un programme à l'autre.
3/ Code très clair : lors de l'appel, tu fais, pour ma procédure par exemple, simplement "exec icsd_GetOrgUsersList 1, 0, 1" et ça te retourne tous les utilisateurs de l'organisation "1", internes et externes confondus, et seulement les actifs. Ca peut très rapidement devenir intéressant quand t'as des requêtes extrêment complexes, et différentes selon des conditions (exemple en fin de post)
Y'a d'autres avantages, mais ce sont les plus flagrants.
Exemple d'une procédure stockée qu'on préfère ne pas avoir à taper dans une page PHP
Code :
|
Marsh Posté le 11-03-2005 à 12:27:29
wow
Je savais que ça existais mais j'ai jamais eu l'occasion (jusqu'a present ) d'essayer.
merci je vais tenter ça de ce pas !
Marsh Posté le 11-03-2005 à 12:29:25
Déjà, va falloir passer à MySQL 4.1.jesaispluscombien sinon il ne supporte pas
Et le support, actuellement, m'a pas l'air terrible sous MySQL, il paraît que c'est plus lent que passer par le PHP.
Cela dit, à plus ou moins court terme, les développeurs de MySQL devraient arranger ça, donc je pense que c'est un plus effectivement de s'y mettre dès maintenant (d'autant plus que tous les SGBD sérieux les supportent très bien )
Marsh Posté le 11-03-2005 à 12:35:27
Bon bah là je vais être bloqué pour le site, il est en mutualisé avec MySQL 4.0.22 mais en effet je vais y jeter un oeil en local
sinon personne n'a d'idées pour y arriver en une requete ?
Marsh Posté le 11-03-2005 à 13:03:05
prblsouris a écrit : Pour mon site perso j'utilise une combinaison de script PHP et de requete MySQL pour obtenir les mots (donc séparés par des espaces) présents le plus grand nombre de fois dans un champs d'une de mes tables. |
Une autre approche serait d'avoir une table qui stocke le nombre d'apparition de chaque mot de 3 lettres et plus (un champ mot et un champ nb par exemple).
Et cette table serait mise à jour lors de la modification de ta table où est stocké le message.
Tout dépend ensuite si tu as plus de modifications que de lecture.
Si tu as plus de lectures que de modifications, je pense que c'est la meilleure méthode.
Marsh Posté le 11-03-2005 à 11:54:34
Pour mon site perso j'utilise une combinaison de script PHP et de requete MySQL pour obtenir les mots (donc séparés par des espaces) présents le plus grand nombre de fois dans un champs d'une de mes tables.
Le champs est au format TINY_STRING et je souhaite obtenir que les mots de 3 caractères et plus.
J'ai pas mal cherché sur le web des fonction MySQL qui me permettrai d'y arriver en une requete mais sans succes.
L'idée c'est donc à la sortie de ma requete d'avoir les mots de plus de 3 caracteres les plus présents ordonnés par nombre d'apparitions decroissantes dans le champs TINY_STRING.
Message édité par prblsouris le 11-03-2005 à 11:55:04
---------------
http://www.hardware404.com L'actualité hardware francophone en continu