Recuperer requete avec jointure

[Résolu]
Signaler
Messages postés
88
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
7 novembre 2010
-
Messages postés
88
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
7 novembre 2010
-
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

Messages postés
10839
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
24
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
}
Messages postés
88
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
7 novembre 2010

Merci je viens enfin de comprendre...
Messages postés
88
Date d'inscription
jeudi 9 mars 2006
Statut
Membre
Dernière intervention
7 novembre 2010

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.