Simplifier mes requetes

Eléphant du PHP | 343 Messages

03 févr. 2012, 04:40

Bonjour à tous,

J'ai un peu de mal avec une requête soit je suis mal réveillé soit mon coté brêle en sql ressurgit :D
Mon joli code de goret:
<?php 
			$sql5 = "SELECT DISTINCT articles.membre, avatars.img_avatar FROM avatars, articles WHERE articles.membre = avatars.membre";
			$req5 = mysql_query($sql5) or die('Erreur SQL !');
						
			while($champs_bdd5 = mysql_fetch_assoc($req5))
			{
				$avatar= $champs_bdd5['img_avatar'];
				$pseudo5= $champs_bdd5['membre'];
									
				$sql6 = "SELECT membre FROM articles where membre='$pseudo5'";
				$req6 = mysql_query($sql6) or die('Erreur SQL !');
				$numart = mysql_num_rows($req6);
		?>
							
			<li>
                            <img src="<?php echo $avatar; ?>" />
                            <p>
                                <?php echo $pseudo5; ?> a proposé <?php echo $numart; ?> articles
                            </p>
                            <div class="separateur"></div>
                        </li>
                       <?php
		 }
							?>
Le problème avec ce code est qu'il prend les membres dans l'ordre et je ne vois pas comment trier par le nombre d'articles dès la 1ere requête.

Désolé pour ce code :mrgreen:
Merci à tous ;)
Développeur web

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

03 févr. 2012, 07:16

Oui clairement quand tu as une requête dans une boucle généralement c'est mal, ça va exploser tes perfs et tu as un autre moyen de le faire. Donc si tu veux obtenir uneliste de membres et leur nombe de posts, jepense que tu peux faire ça:

Code : Tout sélectionner

SELECT articles.membre AS membre, avatars.img_avatar AS avatar, COUNT(*) as nb_posts FROM articles INNER JOIN avatars ON articles.membre = avatars.membre GROUP BY articles.membres, avatars.img_avatar;
J'en ai profité pour sortir ta jointure du WHERE, qui ne devrait être utilisé que pour le filtrage. Les jointures INNER/OUTER JOIN sont plus lisibles, là ça passe car la requête est courte mais quand ça devient compliqué c'est appréciable.

Eléphant du PHP | 343 Messages

03 févr. 2012, 08:03

Merci pour ta réponse rapide ;)
Alors j'ai essayé mais ce n'est pas encore ça. Je pense que le problème se situe sur le group by:
avec articles.membre, avatars.img_avatar j'obtiens: 2,1,4
avec articles.membre: 2,1,4
et avec avatars.img_avatar: 4,1,2

N'y a-t-il pas moyen de faire un "order by nb_posts desc" ou quelque chose d’équivalent?
Développeur web

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

03 févr. 2012, 17:26

N'y a-t-il pas moyen de faire un "order by nb_posts desc" ou quelque chose d’équivalent?
Tu as essaye ?

Eléphant du PHP | 343 Messages

03 févr. 2012, 18:23

La boulette :oops:
J'avais une "Unknown column", j'ai du mettre nb_post à la place de nb_posts :roll:

Merci pour ton aide ;)
Développeur web