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

PHP & Base de données Discussion :

[SQL] y a-t-il trop de requêtes ?


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2002
    Messages : 19
    Par défaut [SQL] y a-t-il trop de requêtes ?
    Bonjour à tous,

    je viens de récupérer un site et voici ce que j'ai à plusieurs endroits :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $sql2 = "SELECT * FROM `blogs`";
    $req2 = mysql_query($sql2) or die ('Requete impossible4<br>'.mysql_error());
    	while ($data = mysql_fetch_array($req2)) {
    		/* On reprend des infos */
     
    		$sql3 = 'SELECT * FROM `rubriques` WHERE `id` = '.$id_cat;
     
    		//On excute la requete
    		$req3 = mysql_query($sql3) or die ('Requete impossible3<br>'.mysql_error());
     
    		//On prend les infos
    		while ($data3 = mysql_fetch_array($req3)) {
    Voilà en gros...

    je ne trouve pas ceci très propre mais je ne sais pas comment arranger...

    J'ai un deuxième exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    //On affiche les résultat
    	while ($data = mysql_fetch_array($req)) {
     
    		//On prend l'ID de la rubrique
    		$id_rub = $data['id'];
     
    		//Requete SQL pour prendre les les ruvriques
    		$sql2 = 'SELECT * FROM `rubriques` WHERE `sous-rub` = "'.$id_rub.'" ORDER BY `titre` ASC;';
     
    		//On exécute la requete
    		$req2 = mysql_query($sql2) or die ('Requete2 impossible');
     
    		$nb_result = mysql_num_rows($req2);
    		$data2 = mysql_fetch_array($req2);
     
    		if ($nb_result == 0) {
    			echo '<option>'.htmlentities($data['titre']).'</option>';
    		} else {
    			echo '<option>'.htmlentities($data['titre']).'</option>';
    			$sql3 = 'SELECT * FROM `rubriques` WHERE `sous-rub` = "'.$id_rub.'" ORDER BY `titre` ASC;';
    			//On exécute la requete
    			$req3 = mysql_query($sql3) or die ('Requete3 impossible');
    			while ($data3 = mysql_fetch_array($req3)) {
    				echo '<option>'.htmlentities($data['titre']).' > '.htmlentities($data3['titre']).'</option>';
    			}
    		}
    	}
    Edit 2 :

    ah et petite question encore... est-ce mieux d ouvrir la requete sql dans le fichier index.php et de la refermer à la fin ou de tout le temps ouvrir / fermer dans chaque fichier PHP inclus ?

    Edit : Désolé pour les balises

    Merci d'avance pour votre aide !

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bonjour

    Pour le premier exmple je ne sais pas, mais pour le second, c'est sûr il ya des doublons Les requêtes sql2 et sql3 sont exactment les mêmes et il n'y a pas eu de changement au niveau de id_rub (pour autant que je puisse juger) Donc on peut au moins faire du ménage sur cette partie là.
    Code nettoyé : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    //On affiche les résultat
    	while ($data = mysql_fetch_array($req)) {
     
    		//On prend l'ID de la rubrique
    		$id_rub = $data['id'];
     
    		//Requete SQL pour prendre les les ruvriques
    		$sql2 = 'SELECT * FROM `rubriques` WHERE `sous-rub` = "'.$id_rub.'" ORDER BY `titre` ASC;';
     
    		//On exécute la requete
    		$req2 = mysql_query($sql2) or die ('Requete2 impossible');
     
    		$nb_result = mysql_num_rows($req2);
     
    		echo '<option>'.htmlentities($data['titre']).'</option>'; // ça c'était dans les deux côtés du if, autant le sortir
     
    		if($nb_result !=0){ // il n'y a plus rien dans le if ==0
    			while ($data2 = mysql_fetch_array($req2)) {
    				echo '<option>'.htmlentities($data['titre']).' > '.htmlentities($data2['titre']).'</option>';
    			}
    		}
    	}
    Normalement, ça doit faire la même chose que la version que tu avais donné
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2002
    Messages : 19
    Par défaut
    Merci pour ce code !

    Effectivement, il est déjà bien plus propre.

    On m'a parlé des requetes JOIN. Ca aiderai à passer de plusieurs requêtes à 1 seule contenant les infos.

    J'ai déjà vu ceci mais je ne vois pas comment l'utiliser dans mon cas.

    Salutations.

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    JOIN permet effectivement de faire des jointures entre les tables. Mais pour pouvoir l'utiliser, il faut connaître la structure des tables en question. Donc, pourrais-tu donner la structure de la base de données si tu la connais ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2002
    Messages : 19
    Par défaut
    Table 1

    ID - Titre - sous_rub
    1 Test 0
    2 Test2 1
    3 Test3 1

    Comme vous l'aurez compris, sous_rub 1 veut dire que Test2 est une sous-rubrique de Test.

    Je souhaite donc avoir au final 1 seul requête SQL (au lieu de 2 actuellement) qui me permettent de créer une page avec :

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    L'ennui c'est que JOIN permet de joindre 2 tables. Donc ce n'est sans doute pas ce qu'il faut utiliser ici. Dans ton premier exemple il y avait une table 'blogs' je crois... c'est la même structure ?

    Le plus simple serait sans doute que tu redonnes les 2 requêtes et qu'on essaie de voir si on peut les rassembler.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. [SQL Server 2005] Problème de génération de requêtes.
    Par just1980 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/04/2006, 18h44
  2. Réponses: 3
    Dernier message: 11/01/2006, 18h35
  3. [D2005 - Access-Sql] Comment imbriquer 4 tbles en 1 requête?
    Par Hauwke dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/11/2005, 09h44
  4. SQL String // Chaine de caractères trop longue
    Par Didier100 dans le forum Bases de données
    Réponses: 7
    Dernier message: 17/10/2005, 21h57
  5. [SQL Server] Limiter le resultat d'une requête
    Par obiwan dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/06/2004, 11h25

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