Bonjour à tous,

J'ai besoin d'un script qui récupère des id de membres d'un certains groupe dans un forum, et qui en second temps récupère dans d'autre tables les différentes données de l'id_user.
Je suis sous un forum phpbb3.

Plus précisément récupère l'avatar du monsieur, son login bien sûr, et sa date de naissance transformée en age !

Je ne sais absolument pas comment m'y prendre,
C'est aussi pourquoi je peux comprendre qu'un tel code soit chiant à écrire, et vous demande donc seulement de me guider dans cette quette du Graal !

MERCI Beaucoup !!

12 réponses


golendercaria
Réponse acceptée

Je recommande pas de lancer tes requêtes dans une boucle "foreach" mais plutôt de construite ta requête (dedans).
Ce que tu cherches c'est faire une jointure. Je vais détailler un exemple. On veut récupérer à partir d'un nom sa boisson preferer.

TABLE1---------------------------------TABLE2

prenom------nom........................prenom------boisson

JEAN--------MERCURY....................JEAN---------COCA-COLA
JACQUES-----LEVENTREUR.................JACQUES------SPRITE
FRED--------CHOCOLAT...................FRED---------THE

A parti d'un nom de la table 1, faire une relation sur la table 2 et récupérer la boisson.

$requete_jointure_tb1_tb2 = "SELECT TABLE1.prenom, boisson FROM TABLE1, TABLE2 WHERE TABLE1.prenom = TABLE2.prenom";

Il existe une multitude de technique pour optimiser sont code, l'optimisation d'une requête SQL est très importante. Il est parfoit plus utiles de traiter
toute une base de donnée plutôt que de lancer 10 req.
Bon travail !

Je te conseille de faire une boucle foreach dans laquelle tu va récupérer, pour chaque id de membre que tu trouve, l'avatar et les autres infos dans la table appropriée.

Ça pourrait donner :

Foreach $id_membre
SELECT (avatar,date,login) FROM table WHERE id=$id_membre
Echo $avatar
Echo $date
End foreach

Ça reste bien entendu qu'une ébauche il faut l'adapter a ton cas.

Canonier
Auteur

et bien je me suis lancé sur ceci, qui marche bien.
Mon probleme est de savoir comment récupéré les données "#" qui sont sur une autre table :S

<?php

$sql="SELECT username, user_id, user_email, user_rank, user_avatar, user_from, user_website, user_birthday FROM forum_users WHERE group_id = 17 AND user_id ORDER by user_id ASC";
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

while($data=mysql_fetch_assoc($req)){

echo '<span id=\"cadre_center\">';
echo '<div class="cadre_haut"></div>';
echo '<div class="cadre_centre">';
echo '<div id="float_left">';
echo "<img src=\"".$data"user_avatar"]."\" width=\"97\" height=\"188\" />";
echo '</div>';
echo '<div id="float_right">';

echo "Pseudo : ".$data"username"]."<br/>";
echo "Login : #LOGIN<br/>";
echo "Anniversaire : ".$data"user_birthday"]."<br/>";
echo "<br/>";
echo "Matos : #MATOS<br/>";
echo "Membre depuis : #DATE<br/>";
echo "Spécialité(s) : #SPECIALITE";

echo '</div>';
echo '</div>';
echo '<div class="cadre_bas"></div>';
echo '<div id="clear"></div>';
echo '</span>';

}

?>

OUi je sias il y a bc d'echo xD !!
disons qu'en plus il y a les div pour le css ^^

Canonier
Auteur

et ceci je l’écris simplement en dessous de mes précédentes requête ou ailleurs ?

C'est vrai que ça peut paraitre plus simple une jointure.
C'est une autre méthode de faire, il faut juste remplacer ta requête par celle qu'a indiqué Golendercaria.

Canonier
Auteur

EN effet ça fonctionne ^^
Cependant j'ai un nouveau probleme, je n'arrive pas a mettre 2 "WHERE"
le premier liant les deux table, je n'arrive pas a mettre un second qui indique l'id du groupe dans lequel doit apparaitre le user a afficher :S

WHERE x.table1=condition AND y.table2=condition2 ...

Alors tu dois utiliser les requêtes imbriquées.

Canonier
Auteur

En effet ^^ Merci.

Derniere chose : dans une troisieme table est donnée le nom du materiel lié a un id. cependant il n'y a pas de user_id. seule dans la seconde table est présente l'id_matos.. j'ai tout essayé, mais au mieux, le ode affiche 5 fois la personne, une fois pour chaque matos posible x)

une solution ?

Il faut que tu fasses une nouvelle requête spécialement pour lister le matériel par personne.

Ben moi pour toute mes bases de données j'utilise (même si je boos pas souvent avec des jointures etc...) une clé qui me permet justement de relié plusieurs table.
Tu peux faire un script qui va créer automatiquement sa (avec tes nom par exemple).

Bon travail !

Merci pour tout ces tutos, j'ai pas d'argent mais en contrepartie je clic sur les annonces.
Merci encore une fois.