Optimiser requête Mysql

extremenet
WRInaute discret
WRInaute discret
 
Messages: 166
Inscription: 2 Oct 2006

Optimiser requête Mysql

Message le Mar Juin 22, 2010 1:00

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: Tout sélectionner
  $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


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Re: Optimiser requête Mysql

Message le Mar Juin 22, 2010 1:12

Il faut rajouter un champ nbVotes dans ta table article que tu mettras à jour à chaque nouveau vote !


seebz
WRInaute impliqué
WRInaute impliqué
 
Messages: 808
Inscription: 15 Avr 2007

Re: Optimiser requête Mysql

Message le Mar Juin 22, 2010 7:41

Salut, sans garantie essaye ça :

Code: Tout sélectionner
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: Tout sélectionner
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


Aaarrrgggh
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 394
Inscription: 16 Mar 2009

Re: Optimiser requête Mysql

Message le Mar Juin 22, 2010 11:23

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.

extremenet
WRInaute discret
WRInaute discret
 
Messages: 166
Inscription: 2 Oct 2006

Re: Optimiser requête Mysql

Message le Mar Juin 22, 2010 11:31

ok merci, je vais tester ceci
par contre ensuite je ressort mes variable par un while comme je fais ? et la valeur de count ?


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Re: Optimiser requête Mysql

Message le Mar Juin 22, 2010 23:30

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 ^^

A terme tu auras le même problème que kwiky mais bon, continue de m'ignorer ^^

extremenet
WRInaute discret
WRInaute discret
 
Messages: 166
Inscription: 2 Oct 2006

Re: Optimiser requête Mysql

Message le Mer Juin 23, 2010 0:10

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.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité