Recuperer requete avec jointure

Résolu
agparchitecture Messages postés 88 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 7 novembre 2010 - 25 oct. 2007 à 12:15
agparchitecture Messages postés 88 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 7 novembre 2010 - 31 oct. 2007 à 08:52
Bonjour, dans le cadre du dévellopement de mon site internet je vient de rencontrer un problème et j'espère que vous pourrez m'aider.

J'ai trois tables:
1: Contient les utilistateurs (nom, id, et mot de pass)
2: Contient des projet en cours (id projet, nom, dossier)
3: Contient la liaisons entre les utilisateurs et les projet.

J'effectue la requete suivante:

 $requete = 'SELECT * FROM USERS
    LEFT JOIN APPARTIENT ON users.idUsers = appartient.AppidUsers
    LEFT JOIN PROJET ON test = idProj
    ORDER BY idUsers, libelle';

Jusque la ca fonctionne je récupère bien ce que je veux.

Ensuite je traite le résultat de la manière suivante:

$resultat = mysql_query($requete);
$nlignes = mysql_num_rows($resultat);
 //print_r ($nlignes);  // -> Compte le bon nombre de ligne OK

 for ($i=0 ; $i < $nlignes ; $i++) // --> retourne tous les tableau de la selection
     {
       $ligne2 = mysql_fetch_array($resultat, $i); //-> recupère le tableau des données pour 1 utilisateur:
      //print_r ($ligne2);
  
     $essais = count($ligne2); //Problème: tableau deux fois trop grand............
  
     for ($j=0; $j < $essais/2 ; $j++)
      {
// Pour traitement des données du tableau. pour afficher les données
      }


  }

Le problème vient que le nombre d'élement est de 10 et il m'en compte 20 parce que il récupère un array du type:

array (
[0]=>1
[idusers]=>1
[1] =>test
[nom]=>test
)
alors que en fait le 0 et id users sont identique. Il me double mon tableau a chaque fois avec les nom des champ et un index incrémanté.

A votre avis d'ou peux bien provenir le problème.

Merci de votre aide.

3 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
25 oct. 2007 à 18:45
Hello,

tu utilises mal les fonctions mysql_*.
D'abord, faire une boucle avec le num_rows est inutile.
Ensuite, mysql_fetch_array() renvoie par défaut le jeu de résultats sous la form d'un tableau doublement indexé : numériquement ET associativement.
Il ne prend aucunement une position de ligne, au passage (ton $i).
Il existe des constantes à lui passer en paramètres pour éviter ça...:

resultat = mysql_query($requete);
while($aLigne = mysql_fetch_array($resultat, MYSQL_ASSOC)) {
    print_r($aLigne);
    // tu traites tes résultats directement ici
}
3
agparchitecture Messages postés 88 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 7 novembre 2010
30 oct. 2007 à 08:42
Merci je viens enfin de comprendre...
0
agparchitecture Messages postés 88 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 7 novembre 2010
31 oct. 2007 à 08:52
Cependant, j'aitoujours un autre problème dans cette boucle... Comment pourrais-je aborder le problème pour que a chaque analyse dans la boucle des tableau le libellé s'ajoute si le nom est le meme que la ligne avant:

Par exemple:

Exemple de récupération mysql par print_r($maligne)
array (
[0]=>1
[idusers]=>1
[1] =>test
[nom]=>test
[libelle]=>essais
)
array (
[0]=>1
[idusers]=>1
[1] =>test
[nom]=>test
[libelle]=>test-essais
)
array (
[0]=>1
[idusers]=>1
[1] =>ast
[nom]=>ast
[libelle]=>test-essais
)

Devienne quelque chose comme ca pour le placer dans une table html.

array (
[0]=>1
[idusers]=>1
[1] =>test
[nom]=>test
[libelle]=>essais
[libelle]=>test-essais
)

array (
[0]=>1
[idusers]=>1
[1] =>ast
[nom]=>ast
[libelle]=>NULL
[libelle]=>test-essais
)

Pour le moment j'essaye par fonction mais le problème vient que je ne sais pas comment renvoyer la valeur de la ligne précedente et celle en cours pour comparer.

J'espère avoir bien exposé le problème. Sinon poser des questions. Merci pour cette entraide.
0
Rejoignez-nous