Problèm de logique [PHP/MySQL] - Programmation
Marsh Posté le 22-10-2001 à 00:09:13
Ventilo a écrit a écrit : Sur mon site, je veux faire un tableau de statisqitque sur les items les plus discuter... J'ai une table MYSQL conçu comme ca: |id|itemname|nick|commentaire| Maintenant ce que je voudrais faire c'est avoir combien de commentaire il y a eu pour chaque item et faire un top 10. Mais comme je commence en laguage SQl je sais pas trop comment faire.... Quelqu'un peu me mettre sur la piste?? Pour voir mon site c'est http://mxq.multimania.com quoi que c'est pas vraiment utile à la question, mais je veux vous donner le plus de détails! merci d'avance! |
En faisant une requete du type :
"select itemname, count(id) as id_count
from ma_table
group by itemname
order by id_count DESC"
tu récuperas le classement de tes items les plus discutés, triés par ordre décroissant.
Pour déterminer les plus discutés, il doit falloir utiliser une instruction de type ROWCOUNT (sous Oracle), ou MAXROW (chez Microsoft). J'ignore quel est le nom de cette instruction sur mySQL, mais essaye de jetter un oeil dans la doc pour ca, et complete la requete que je t'ai indiqué.
@+
Marsh Posté le 22-10-2001 à 10:47:16
On améliore la requête d'"iskream" :
"select itemname, count(id) as id_count
from ma_table
group by itemname
order by id_count DESC
LIMIT 0,10"
Ca te retourne juste les 10 plus discutés.
Ca ne marche qu'avec MySQL.
Marsh Posté le 22-10-2001 à 11:02:41
voilà l'instruction qu'il me manquait...je note pour ma culture personnelle
Marsh Posté le 23-10-2001 à 04:31:42
omega2 a écrit a écrit : On améliore la requête d'"iskream" : "select itemname, count(id) as id_count from ma_table group by itemname order by id_count DESC LIMIT 0,10" Ca te retourne juste les 10 plus discutés. Ca ne marche qu'avec MySQL. |
J'avais compris le principe moi même, mais merci quand même
Marsh Posté le 23-10-2001 à 17:08:42
speedyop a écrit a écrit : vi le limit c ultime par rapport a SQL2000 de merde |
Remarque très constructive
mySQL n'est pas comparable aux purs SGBD commerciaux tels que Oracle, Sybase, MS-SQL Server,etc...il n'implémente pas encore toutes les fonctionnalités de base (transactions, requetes imbriquées, triggers, procédures stockées...).
Cependant, il est malgré tout génial parcequ'abordable techniquement, léger et performant.
Mais bon, chaque applis à son SGBD qui lui convient, le client est roi
Après, pour avoir un truc plus complet et qui soit open, il y a Interbase, c'est fait par Borland/Inprise, ou bien encore postGreSQL.
@+
Marsh Posté le 23-10-2001 à 17:25:44
klk sait si limit effectue la requette en entier et ensuite prends la partie ki l'interesse dans le recorset? parceque dans ce cas la c pas genial sur 15000 lignes...
et la en SQL2000 je suis sur que t'es obliger de te tapper tout le recordset
Marsh Posté le 23-10-2001 à 17:33:24
speedyop a écrit a écrit : klk sait si limit effectue la requette en entier et ensuite prends la partie ki l'interesse dans le recorset? parceque dans ce cas la c pas genial sur 15000 lignes... et la en SQL2000 je suis sur que t'es obliger de te tapper tout le recordset |
pas si tu fais un count() sur toute ta table
Marsh Posté le 23-10-2001 à 17:35:26
? pas compris....
exemple afficher des articles avec navigation page suivante page precedente...kan t'as 20000 articles...
Marsh Posté le 23-10-2001 à 17:39:58
speedyop a écrit a écrit : ? pas compris.... exemple afficher des articles avec navigation page suivante page precedente...kan t'as 20000 articles... |
j'ai pas la syntaxe exacte en tete, mais comme je le disais un peu plus haut dans le thread, il y a une fonction qui s'appelle rowcount ou maxrow.
Tu fais un truc du genre
select *
from matable
where start=XXX
having maxrow=10
Apres, tu fais simplement varier le critere de départ (ici start=XXX) en fonction de l'endroit ou tu te trouves dans ta table ou de l'endroit ou tu veux aller.
C'est de la folie de ramener les 20000 d'un coup, tu ramenes simplement les 10 dont tu as besoin à chaque fois
Marsh Posté le 23-10-2001 à 17:41:27
speedyop a écrit a écrit : ? pas compris.... exemple afficher des articles avec navigation page suivante page precedente...kan t'as 20000 articles... |
On ne parlait pas de la meme chose moi j'étais encore collé au topic original
Marsh Posté le 23-10-2001 à 17:48:09
ok donc impossible de prendre les 10 article de ma deuxieme page donc?
Marsh Posté le 23-10-2001 à 18:01:55
speedyop a écrit a écrit : ok donc impossible de prendre les 10 article de ma deuxieme page donc? |
bien si, il te suffit d'indiquer dans "start=" la valeur de ton dernier enregistrement de la derniere requete effectuée,
et ainsi de suite.
Pour optimiser, autant ne ramener que le nécessaire
A chaque fois que j'ai du développer de telles fonctionnalités pour des sites clients, je n'ai jamais vu (apres avoir analysé les stats) que la majorité des internautes allaient voir la 72 eme page de résultat de la recherche. C'est le cas d'un ou deux uniquement
L'idée est de trouver un id séquentielle ou une astuce qui te permette de marquer ce parametre "start" dans tes liens apres, mais cela depend de tout un tas de truc, dont ton modele de données, les outils que tu utilises, ton type d'application, etc... Dans une appli client serveur, la manière de faire peut encore varier.
Marsh Posté le 23-10-2001 à 18:16:28
bah en mysql c tout vu:
avec page recupéré de l'url et rowcount fixé par exemple a 10
select truc from table limit page,rowcount
en SQL 2000
tu me dit que l'equivalent c
select truc from table where start=page having maxrow=rowcount
Marsh Posté le 21-10-2001 à 21:34:39
Sur mon site, je veux faire un tableau de statisqitque sur les items les plus discuter...
J'ai une table MYSQL conçu comme ca:
|id|itemname|nick|commentaire|
Maintenant ce que je voudrais faire c'est avoir combien de commentaire il y a eu pour chaque item et faire un top 10.
Mais comme je commence en laguage SQl je sais pas trop comment faire.... Quelqu'un peu me mettre sur la piste??
Pour voir mon site c'est http://mxq.multimania.com
quoi que c'est pas vraiment utile à la question, mais je veux vous donner le plus de détails! merci d'avance!