Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1092 connectés 

  FORUM HardWare.fr
  Programmation

  [PHP/MySQL] Problèm de logique

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP/MySQL] Problèm de logique

n°66757
Ventilo
Ventilo? Depuis 1998!
Posté le 21-10-2001 à 21:34:39  profilanswer
 

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!

mood
Publicité
Posté le 21-10-2001 à 21:34:39  profilanswer
 

n°66788
iskream
Posté le 22-10-2001 à 00:09:13  profilanswer
 

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é.
 
@+

n°66793
Ventilo
Ventilo? Depuis 1998!
Posté le 22-10-2001 à 00:41:12  profilanswer
 

Merci beacoup!!!  :)

n°66811
omega2
Posté le 22-10-2001 à 10:47:16  profilanswer
 

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.

n°66816
iskream
Posté le 22-10-2001 à 11:02:41  profilanswer
 

voilà l'instruction qu'il me manquait...je note pour ma culture personnelle :)

n°67020
Ventilo
Ventilo? Depuis 1998!
Posté le 23-10-2001 à 04:31:42  profilanswer
 

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 :)

n°67188
speedyop
Posté le 23-10-2001 à 16:59:48  profilanswer
 

vi le limit c ultime par rapport a SQL2000 de merde

n°67190
iskream
Posté le 23-10-2001 à 17:08:42  profilanswer
 

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.
 
@+

n°67194
speedyop
Posté le 23-10-2001 à 17:25:44  profilanswer
 

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

n°67196
iskream
Posté le 23-10-2001 à 17:33:24  profilanswer
 

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 :)

mood
Publicité
Posté le 23-10-2001 à 17:33:24  profilanswer
 

n°67197
speedyop
Posté le 23-10-2001 à 17:35:26  profilanswer
 

? pas compris.... :heink:  
 
exemple afficher des articles avec navigation page suivante page precedente...kan t'as 20000 articles...

n°67198
iskream
Posté le 23-10-2001 à 17:39:58  profilanswer
 

speedyop a écrit a écrit :

? pas compris.... :heink:  
 
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 :)

n°67200
iskream
Posté le 23-10-2001 à 17:41:27  profilanswer
 

speedyop a écrit a écrit :

? pas compris.... :heink:  
 
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 :)

n°67202
speedyop
Posté le 23-10-2001 à 17:48:09  profilanswer
 

ok donc impossible de prendre les 10 article de ma deuxieme page donc?

n°67207
iskream
Posté le 23-10-2001 à 18:01:55  profilanswer
 

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.

n°67210
speedyop
Posté le 23-10-2001 à 18:16:28  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [PHP/MySQL] Problèm de logique

 

Sujets relatifs
[PHP] cookies...[PHP] Expressions régulières, comment ça marche?
[PHP] [ULTRA URGENT] arrondire un nombre[MYSQL] free et bd ???
[PHP] Aide pour finir mon guestbook[PHP] J'ai une colle, le premier qui trouve ...
[ PHP ] Formulaire + bdd[PHP] Gestion d'images ??
[PHP]combien coute une journee de dev?convertion postgresql -> mysql
Plus de sujets relatifs à : [PHP/MySQL] Problèm de logique


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR