IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

afficher nième element tab associatfi [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Par défaut afficher nième element tab associatfi
    Bonjour,
    je souhaite afficher le n-ième element d'un tableau créé avec un SELECT .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $query_Article = "SELECT ID, Libelle FROM article";
    $Article = mysql_query($query_Article, $Conn_comm) or die(mysql_error());
    $row_articles = mysql_fetch_array($Article);
    $totalRows_Article = mysql_num_rows($Article);
    dans mon tableau j'ai plusieurs enregistrements qui me sont retournés.
    dans une boucle for je voudrais afficher le n-ième enregistrement.

    j'ai fait ça mais ça ne m'affiche pas la bonne valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for($n = 0; $n < $totalRows_Article; $n++)
    {$row_articles[$n][Libelle]}
    comment afficher l'énième element?
    Merci.

  2. #2
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Cô ça ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for($n = 0; $n < $totalRows_Article; $n++)
    {$row_articles['Libelle']}

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Par défaut
    je suis allé un peu vite, desolé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for($n = 0; $n < $totalRows_Article; $n++)
    {
      echo($row_articles[$n]['Libelle']);
    }

  4. #4
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Pour moi c'est le [$n] qu'il faut ôter...

  5. #5
    Membre chevronné Avatar de XtofRoland
    Profil pro
    Inscrit en
    Août 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 357
    Par défaut
    tu dois faire un if ($n == xx) echo tab['libelle'];

    mais ce serait dommage de boucler dessus pour n'afficher qu'un élément.

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Le souci avec ton code actuel est que tu ne parcours pas tous les résultats renvoyés par ton SELECT, seulement le premier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $result = mysql_query($sql) or die(mysql_error());
    while($tmp = mysql_fetch_assoc($result)){
       $rows[] = $tmp; // pour éviter une case vide à la fin du tableau
    }
     
    $nb_of_results = mysql_num_rows($result);
    Ensuite, tu peux accéder à tes résultats avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $offset = 5;
    $rows[offset];

  7. #7
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Citation Envoyé par Kirkis
    Le souci avec ton code actuel est que tu ne parcours pas tous les résultats renvoyés par ton SELECT, seulement le premier.
    Mais pas du tout ! Il boucle sur tout le retour du SELECT avec cette boucle for, même s'il est préférable de boucler un résultat avec while nettement moins couteuse en ressources.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Par défaut
    salut,
    mais si je veux afficher le champ 'Libelle' de la ligne $n par exemple, quelle est la syntaxe?

  9. #9
    Membre émérite Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Par défaut
    Le plus simplement du monde : Faire ton select dessus !

    Pourquoi ramener tout un lot de tupple pour en afficher qu'un seul ?

    Il y a un truc qui m'échappe.

  10. #10
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    @macbook : Je pense que le truc qui t'échappe est qu'il faut mettre mysql_fetch...() dans une boucle si on veut récupérer tous les tuples. S'il n'y a qu'un seul appel, il n'y a qu'un seul tuple.

    @guns17 : En effet, si tu ne souhaites qu'un seul enregistrement et que tu n'as pas besoin des autres, il serait préférable de te renseigner sur la condition WHERE. Alors seulement, tu pourras ne mettre qu'un seul appel à mysql_fetch_...() dans ton script.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Par défaut
    j'ai besoin de recuperer 2 champs avec mon select.

    je compare les identifiants de 2 requetes SELECT differentes.

    je fais une 1ère boucle dans laquelle j'imbrique une 2eme boucle,
    si l'identifiant est le meme, alors j'affiche le Libelle.
    mon probleme est que je n'arrive pas à acceder au Libelle pour la ligne n du 2eme tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    $query_Article = "SELECT ID, Libelle FROM article";
    $Article = mysql_query($query_Article, $Conn_comm) or die(mysql_error());
    $row_articles = mysql_fetch_array($Article);
    $totalRows_Article = mysql_num_rows($Article);
     
    $query_plv = "SELECT * FROM plv";
    $plv = mysql_query($query_plv, $Conn_comm) or die(mysql_error());
     
    while($row_plv = mysql_fetch_array($plv))
    {
        for($n = 0; $n < $totalRows_Article; $n++)
       {
          if($row_articles[$n]['ID'] == $row_plv['ID'])
          {
             echo($row_articles[$n]['Libelle']);
          }
       }
    }
    $row_articles me renvoie 2 enregistrements, j'ai donc besoin de parcourir le tableau

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 109
    Par défaut
    Et avec ue seule requete :

    SELECT article.Libelle
    FROM article,plv
    WHERE article.id = plv.id

    un truc du genre ???

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Par défaut
    je veux afficher l'ensemble du catalogue plv et mettre une annotation devant les articles qui sont présents dans le catalogue. (pas afficher leur Libelle en fait)
    c'est pour ca que je passe par 2 requetes.

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 109
    Par défaut
    et avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *  
    FROM plv 
    LEFT JOIN select 1 as Flag FROM article WHERE article.id = plv.id
    Enfin un truc du genre.. je suis nul avec les left join .. mais j'ai deja vu des exemples sur ce forum:
    Et apres tu peux boucler sur l'ensemble des enreg de plv et tu fais un if (Flag) => alors il y a une correpondance ...

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Par défaut
    Citation Envoyé par dev_php_205
    et avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *  
    FROM plv 
    LEFT JOIN select 1 as Flag FROM article WHERE article.id = plv.id
    Enfin un truc du genre.. je suis nul avec les left join .. mais j'ai deja vu des exemples sur ce forum:
    Et apres tu peux boucler sur l'ensemble des enreg de plv et tu fais un if (Flag) => alors il y a une correpondance ...
    j'ai un peu de mal avec les jointures aussi, d'autant plus que les requetes $query_articles et $query_plv sont plus fournies que ça à la base, je les ai allégées pour la visibilité.

    je suppose qu'il y a un moyen de parcourir le resultat de la requete avec un iterateur mais je coince.

    j'ai essayé en remplacement la boucle for par
    while($row_article = mysql_fetch_array($Articles))

    ca fonctionne pour le premier passage mais ensuite je n'arrive pas à replacer le pointeur sur le premier enregistrement de $row_article quand je passe au 2 eme enregistrement de $row_plv.

  16. #16
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    J'ai lu un peu en diagonale ce qui s'est dit mais j'ai flashé sur ton dernier extrait de code.

    Le voici, commenté :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $query_Article = "SELECT ID, Libelle FROM article"; // Pour récupérer l'id et le libellé de chaque article
    $Article = mysql_query($query_Article, $Conn_comm) or die(mysql_error()); // Lancer la requête
    $row_articles = mysql_fetch_array($Article); // Récupérer UN SEUL enregistrement : le premier puisque c'est la première fois qu'on lance la fonction
    $totalRows_Article = mysql_num_rows($Article); // Récupérer le nombre d'enregistrements retournés par mysql_query()
     
    $query_plv = "SELECT * FROM plv"; // Pour récupérer tous les champs de la table plv
    $plv = mysql_query($query_plv, $Conn_comm) or die(mysql_error()); // Exécuter la requête
     
    while($row_plv = mysql_fetch_array($plv)) // Parcourir tous les plv
    {
        for($n = 0; $n < $totalRows_Article; $n++) // Parcourir autant de fois qu'il y a d'articles
       {
          if($row_articles[$n]['ID'] == $row_plv['ID']) // Aller à l'index $n des articles (seul le permier index existe)
          {
             echo($row_articles[$n]['Libelle']); // Afficher cet index
          }
       }
    }

    Voici, je pense, ce que tu souhaitais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    $query_Article = "SELECT ID, Libelle FROM article";
    $Article = mysql_query($query_Article, $Conn_comm) or die(mysql_error());
    while($tmp = mysql_fetch_array($Article)){ // Récupérer TOUS les articles dans un tableau
       $row_articles[] = $tmp;
    }
    $totalRows_Article = mysql_num_rows($Article);
     
    $query_plv = "SELECT * FROM plv";
    $plv = mysql_query($query_plv, $Conn_comm) or die(mysql_error());
     
    while($row_plv = mysql_fetch_array($plv))
    {
        for($n = 0; $n < $totalRows_Article; $n++)
       {
          if($row_articles[$n]['ID'] == $row_plv['ID'])
          {
             echo($row_articles[$n]['Libelle']);
          }
       }
    }
    Après, il y a moyen d'améliorer le truc (unbuffered_query par exemple) mais l'idée est là.

    [Edit] Oups, coquille corrigée.

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Par défaut
    merci pour ton aide
    j'essaye dès demain matin et je te tiens au courant.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 81
    Par défaut
    Merci kirkis, tu es parfait(e)s,
    fetvch_array ne prend qu'un element en fait si on ne le parcours pas, j'ai compris now.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher un element selon sa taille en centimetre
    Par dacid dans le forum Delphi
    Réponses: 8
    Dernier message: 24/07/2006, 13h51
  2. Réponses: 2
    Dernier message: 14/06/2006, 08h53
  3. afficher les element d'une file
    Par jalilc dans le forum C
    Réponses: 16
    Dernier message: 23/05/2006, 18h15
  4. Réponses: 1
    Dernier message: 20/05/2006, 11h46
  5. afficher un element avant un autre
    Par hm19000 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 17/10/2005, 22h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo