Optimiser requête Mysql

WRInaute discret
Bonjour,

j'essaie d'optimiser une une requête mysql mais sans succès :

le but est de mettre deux requêtes en une pour améliorer la vitesse d'affichage et réduire par 2voi 3 le nombre de requête mysql sur mon site :

requête :
Code:
  $info_article = mysql_query("SELECT titre, categorie, auteur, pour, description, statut  FROM articles where idarticle  = '$_GET[article]'  ");
if(mysql_num_rows($info_article) > 0)
		{
while($row = mysql_fetch_array($info_article)){ 
 $titre = stripslashes($row['titre']);
 $categorie = stripslashes($row['categorie']);
 $auteur = stripslashes($row['auteur']);
  $description = stripslashes($row['description']);
$statut   = stripslashes($row['statut']);
$idarticle = $_GET['article'];
   }


$nombrevotearticle = mysql_query("SELECT * FROM votearticle where idarticle='$idarticle'  and statut ='1'");
	 $nombre_vote_total = (mysql_num_rows($nombrevotearticle));

}

le but de cette requête est d'afficher un article et d'afficher le nombre de vote. Je sais qu'il y a une requête pour réduire celle-ci au minimum mais je ne trouve pas la solution.

et si vous avez d'autre astuce.

merci de votre aide
 
WRInaute accro
Il faut rajouter un champ nbVotes dans ta table article que tu mettras à jour à chaque nouveau vote !
 
WRInaute impliqué
Salut, sans garantie essaye ça :

Code:
SELECT a.titre, a.categorie, a.auteur, a.pour, a.description, a.statut, COUNT( va.[UNIQUE_ID] ) AS nombre_vote_total
FROM articles a
LEFT OUTER JOIN votearticle va
   ON ( va.idarticle = a.idarticle AND va.statut = '1' )
WHERE a.idarticle = '$_GET[article]'
GROUP BY a.idarticle
(oublies pas de remplacer [UNIQUE_ID] par le nom du champ primaire de la table "votearticle")


Ici une requête du même genre qui fonctionne bien sur un de nos site (pour inspiration) :
Code:
SELECT Fiche.*, COUNT(Vote.id) AS nb_note, IFNULL(AVG(Vote.note),3) AS avg_note 
FROM fiches Fiche 
LEFT OUTER JOIN votes Vote 
	ON (Vote.fiche_id=Fiche.id AND Vote.online) 
WHERE Fiche.id IN ('23','32','40','45','56','81','120') AND ( Fiche.online ) 
GROUP BY Fiche.id 
ORDER BY avg_note DESC, nb_note DESC, nb_visites DESC, Fiche.name ASC
 
WRInaute occasionnel
ne pas oublier de mettre des index sur les champs où s'effectuent les conditions, ce qui permettra d'augmenter la vitesse d'exécution de la requête.
 
WRInaute discret
ok merci, je vais tester ceci
par contre ensuite je ressort mes variable par un while comme je fais ? et la valeur de count ?
 
WRInaute accro
Si t'as vu extremenet je t'ai proposé une solution :) Elle t'évite une requête lourde et fréquente avec jointure et donc divise réellement la charge serveur. Après tu fais ce que tu veux ^^
 
WRInaute discret
je ne t'ignore pas du tout, j'utilise celle-ci, mais la c'est pour faire une comparaison car j'ai parfois des différences au niveau du chiffre réelle. rajouter un champ et sur et certaines la meilleur solution.
 
Discussions similaires
Haut