IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Aide optimisation d'une requete MySQL


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Points : 48
    Points
    48
    Par défaut Aide optimisation d'une requete MySQL
    Bonjour,

    J'ai une petite question à vous poser, je ne sais pas ce qu'il est mieux de faire d'un point de vue performances pour un système tout simple de news qui peuvent être rattachées à des images.

    J'ai une table contenant mes news (ID, TITRE, TEXTE)
    ainsi qu'une table contenant mes images (ID, URL, ID_NEWS)

    Actuellement je fais comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	$retour_messages=mysql_query("SELECT * FROM news ");
    	while($result=mysql_fetch_assoc($retour_messages)) {		
    				$aff.='<article>';
    				$aff.='<p>'.getdateSQL($result["PDATE"]).' - <strong>'.$result["TITRE"].'</strong></p>';
    				$aff.=$result["TEXTE"];
    					$r=mysql_query("SELECT * FROM news_images WHERE ID_GALERIE=".$result["ID"]."");
    					while($img=mysql_fetch_assoc($r)) {
    					  $aff.='<img src="upload/news/'.$img["URL"].'">';
    					}
    				$aff.='</article>';			
    	}

    D'un niveau performances, je me suis dit que je pourrai utiliser une jointure pour éviter la boucle dans la boucle…

    Voici donc ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $retour_messages=mysql_query("
    	SELECT * FROM news JOIN 
    	news_images ON news.ID = news_images.ID_GALERIE
    	WHERE news.PUBLIE=1 
    	GROUP BY news.ID");
     
    	while($result=mysql_fetch_assoc($retour_messages)) {	
    				$aff.='<article>';
    				$aff.='<p>'.getdateSQL($result["PDATE"]).' - <strong>'.$result["TITRE"].'</strong></p>';
    				$aff.=$result["TEXTE"];
    				 $aff.='<img src="upload/news/'.$result["URL"].'">';
    				$aff.='</article>';			
    	}
    Seulement avec ce code j'ai uniquement la première image qui s'affiche, il faudrait boucler sur les images en ayant le total du nombre de résultats trouvé ?

    Quelle serait selon vous la meilleure solution d'un point de vue performances ?

    ça serait intéressant d'avoir votre avis à ce sujet,

    D'avance merci et salutations

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    C'est bien par une jointure qu'il faut passer, par contre le GROUP BY n'a rien à faire dans la requête.
    Par ailleurs le * doit être remplacé par la liste des colonnes à sélectionner.

    Je vous conseille la lecture des tutoriels du forum sur l'apprentissage du SQL :
    http://sql.developpez.com/#apprendre-sql

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Points : 48
    Points
    48
    Par défaut
    Merci pour la réponse, mais si j'enlève le GROUP BY, ma boucle affiche une fois chaque photo en doublant les entrées de la table news (Une news peut contenir plusieurs photos).

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2008
    Messages : 112
    Points : 48
    Points
    48
    Par défaut
    personne pour m'aider ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Personnellement je penses que je garderai votre 1ere solution.

    Vous avez une colonne de type "TEXT" dans votre 1ere table, et dupliquer le retour de cette colonne, à cause de la jointure, me semble pas tip top.


    Je mettrai plutot une limitation sur le nombre de news affichable en l'état ... les chargerai au fur et a mesure que l'utilisateur clique un bouton "afficher plus" par exemple.

Discussions similaires

  1. Besoin d'aide sur une requete MySQL
    Par bpdelavega dans le forum Requêtes
    Réponses: 7
    Dernier message: 31/10/2012, 15h24
  2. Aide à L'optimisation d'une requete
    Par psyrio dans le forum Développement
    Réponses: 9
    Dernier message: 19/10/2010, 14h13
  3. [MySQL] Aide pour alleger une requete
    Par toniox dans le forum Langage SQL
    Réponses: 6
    Dernier message: 10/07/2006, 17h12
  4. optimisation d'une requete de recherche
    Par moog dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 06/04/2005, 16h58
  5. résultat d'une requete mysql
    Par noinneh dans le forum MFC
    Réponses: 4
    Dernier message: 03/03/2005, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo