Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/04/2007, 19h04   #1
Invité de passage
 
Inscription : juillet 2002
Messages : 16
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Suisse

Informations forums :
Inscription : juillet 2002
Messages : 16
Points : 1
Points : 1
Envoyer un message via MSN à bisol Envoyer un message via Skype™ à bisol
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 :
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 :
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 !
bisol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 09h05   #2
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 451
Points : 5 451
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é :
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é
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 09h16   #3
Invité de passage
 
Inscription : juillet 2002
Messages : 16
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Suisse

Informations forums :
Inscription : juillet 2002
Messages : 16
Points : 1
Points : 1
Envoyer un message via MSN à bisol Envoyer un message via Skype™ à bisol
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.
bisol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 10h11   #4
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 451
Points : 5 451
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 10h12   #5
Invité de passage
 
Inscription : juillet 2002
Messages : 16
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Suisse

Informations forums :
Inscription : juillet 2002
Messages : 16
Points : 1
Points : 1
Envoyer un message via MSN à bisol Envoyer un message via Skype™ à bisol
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 :
bisol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2007, 10h25   #6
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

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

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 451
Points : 5 451
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)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h10.


 
 
 
 
Partenaires

Hébergement Web