Recuperer requete avec jointure [Résolu]

agparchitecture 88 Messages postés jeudi 9 mars 2006Date d'inscription 7 novembre 2010 Dernière intervention - 25 oct. 2007 à 12:15 - Dernière réponse : agparchitecture 88 Messages postés jeudi 9 mars 2006Date d'inscription 7 novembre 2010 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 25 oct. 2007 à 18:45
3
Merci
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
}

Merci malalam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de malalam
agparchitecture 88 Messages postés jeudi 9 mars 2006Date d'inscription 7 novembre 2010 Dernière intervention - 30 oct. 2007 à 08:42
0
Merci
Merci je viens enfin de comprendre...
Commenter la réponse de agparchitecture
agparchitecture 88 Messages postés jeudi 9 mars 2006Date d'inscription 7 novembre 2010 Dernière intervention - 31 oct. 2007 à 08:52
0
Merci
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.
Commenter la réponse de agparchitecture

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.