Boucle sur champ mysql

Fermé
t671 Messages postés 1442 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 novembre 2024 - 8 févr. 2010 à 13:50
garion28 Messages postés 1545 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 - 10 févr. 2010 à 17:57
Bonjour,

J'ai une table nommée "infos" qui contient un champ "participant". Ce champ peut être vide ou contenir de 1 à plusieurs numéros (numéros qui correspondent à l'identifiant unique "id_mb" de la table "membres") sous la forme "-1-2-3-4-5-6".

Je veux extraire ce ou ces numéros, si ils existent, et afficher leur correspondance (nom, prénom) de la table "membres".

$requete="SELECT * FROM infos"; 
$result = mysql_query($requete,$link) or exit ('Erreur : '.mysql_error() );

$result2="SELECT * FROM membres"; 
$result2 = mysql_query($result2,$link) or exit ('Erreur : '.mysql_error() );

while($row = mysql_fetch_array($result)) 
{
  if (!empty($row['participant']))
  {
  $part = explode("-", $row['participant']);


Arrivé là, $part[0] contient 1, $part[01] contient 2 ...... (les numéros du champ "participant").
Comment extraire les enregistrements (numéros) contenus dans le champ "participant" jusqu'au dernier, s'ils existent, et faire l'association à l'identifiant "id_mb" de la table "membres" ?

Merci

4 réponses

t671 Messages postés 1442 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 novembre 2024 11
8 févr. 2010 à 17:18
La situation a évolué .... Je reprends, et voici donc où j'en suis :

J'ai une table nommée "infos" qui contient un champ "participant". Ce champ peut être vide ou contenir de 1 à plusieurs numéros. Les numéros correspondent à un identifiant unique "id_mb" de la table "membres", et sont sous la forme "-1-2-3-4-5-6".

Je veux extraire ce ou ces numéros, s’ils existent, et afficher leur correspondance (nom) de la table "membres".
Mais je n’arrive à afficher que le dernier nom enregistré, et moi je les veux tous ! Dans l’exemple "-1-2-3-4-5-6", je n’afficherais que le nom correspondant à 6 ?

Voici mon code

$requete="SELECT * FROM infos ORDER BY date ASC"; 
$result = mysql_query($requete,$link) or exit ('Erreur : '.mysql_error() );

while($row = mysql_fetch_array($result)) 
{
//vérification du champ participant. Si non vide, on ira rechercher la correspondance dans la table "membres".
if (!empty($row['participant']))
	{
	$part = explode("-", $row['participant']);
	$i = 0; 
    	foreach ($part as $part2) 
    	{ 
        $part2 = ($part[$i]);
        $i++;
    	}   
	$req="SELECT * FROM membres where id_mb like '$part2'"; 
	$result2 = mysql_query($req,$link) or exit ('Erreur : '.mysql_error() );
	while ($row2 = mysql_fetch_array($result2))
		{
        echo '<td>'.$row['titre'].'</td>'; // issu de la base infos
        echo '<td>'.$row['texte'].'</td>'; // issu de la base infos
        echo '<td>'.$row2['nom'].'</td>'; // issu de la base membres ....................


Merci pour votre aide
0
william7007 Messages postés 335 Date d'inscription dimanche 28 décembre 2008 Statut Membre Dernière intervention 23 mars 2010 46
8 févr. 2010 à 22:15
Slt

essaie ça voir
$requete="SELECT * FROM infos ORDER BY date ASC"; 
$result = mysql_query($requete,$link) or exit ('Erreur : '.mysql_error() );

while($row = mysql_fetch_array($result)) 
{
//vérification du champ participant. Si non vide, on ira rechercher la correspondance dans la table "membres".
   if (!empty($row['participant']))
    {
	$part = explode("-", $row['participant']);
	$i = 0; 
    	foreach ($part as $part2) 
    	{ 
           $part2 = ($part[$i]);
           $i++;
           $req="SELECT * FROM membres where id_mb like '$part2'"; 
           $result2 = mysql_query($req,$link) or exit ('Erreur : '.mysql_error() );
           $row2 = mysql_fetch_array($result2);
           echo '<td>'.$row['titre'].'</td>'; // issu de la base infos
           echo '<td>'.$row['texte'].'</td>'; // issu de la base infos
           echo '<td>'.$row2['nom'].'</td>'; // issu de la base membres ....................
    	} 
    }
}  



Mais au fait je te conseillerais moi de resoudre ce type de problème par la création d'une table (classe) association qui associérais pour chaque infos les membres abonnés. la table devra contenir les Identifiants de la table Info et membres, et de là t'auras qu'à faire une simple requête et boucler dessus pour avoir ton résultat tout beau et tout facile.
en tout cas bonne chance et à plus.
cdlt.
0
t671 Messages postés 1442 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 novembre 2024 11
10 févr. 2010 à 14:28
Bonjour william7007,

Quand tu parles de création d'une table association, je pense que u fais allusion à "mysql_fetch_assoc" ?
J'ai remplacé dans mon script "$row2 = mysql_fetch_array($result2);" par "$row2 = mysql_fetch_assoc($result2);", mais je n'ai pas de différence !

Pourrais-tu m'en dire plus ?

Merci
0
garion28 Messages postés 1545 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 406
10 févr. 2010 à 14:35
ta table infos et membres sont composé de quels champs ? et quel champ fait la relation entre ces 2 tables ?

a mon avis ca peu se régler par une requète

ah non j'ai rien dis pour la requète, tu extrait chaque chiffre entre les - ce qui n'irai pas pour une requète avec jointure
0
t671 Messages postés 1442 Date d'inscription lundi 25 février 2008 Statut Membre Dernière intervention 2 novembre 2024 11
10 févr. 2010 à 15:11
Salut garion28,

J'ai ma première table "infos" qui a comme champs : "id", "titre", "texte", "date" et "participant".
Ma seconde table "membres" a comme champs : "id_mb", "nom", "prenom", "adresse".

Quand un membre veut s'inscrire à une info, son id_mb est enregistré dans le champ "participant" sous la forme "-1-2-3-4....". Mais j'aurais aussi pu l'enregistrer sous la forme "1234.....", sauf que je n'ai pas trouvé pour faire l'explode dans ce style.

J'aurais effectivement pu opter à faire une jopinture entre les tables, mais le problème reste le même.

Si j'ai plusieurs enregistrement dans un champ, comment les lire séparemment ?
0
garion28 Messages postés 1545 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 406
10 févr. 2010 à 17:57
je pense a un truc du genre

$sql="select titre,texte,date,nom,prenom,adresse from infos,membres where participant=id_mb"
$jeu=mysql_query($sql)
while($row=mysql_fetch_array($jeu){
et ensuite tu utilise les champs par un $row['titre'] (enfin chaque champs de ta requète)
}

mais ce que je dis est peut etre faux puisque le php n'est pas mon truc, de plus ca suppose que les valeurs de participant et id_mb sont les mêmes (ce qui serai logique si ta base était bien faite)
0