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 :

Savoir si on est au dernier enregistrement avec un PDO:fetch() [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 254
    Points : 69
    Points
    69
    Par défaut Savoir si on est au dernier enregistrement avec un PDO:fetch()
    Bonjour,

    je concatène des données de tables dans une chaîne de caractère séparées par une virgule.

    Je veux savoir le dernier enregistrement pour ne ps mettre une virgule a la fin qui va traîner

    voici mon code

    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
     
    $reponse_technicien = $bdd_MCHNMFT->query('SELECT lmt.technicien_id,nom_techicien FROM lignetravaux_materiels_techniciens AS lmt INNER JOIN techniciens AS tc
     ON lmt.technicien_id=tc.technicien_id and  lmt.bontravaux_id='. $id_bontravux);
     
     if ($donnees_technicien = $reponse_technicien->fetch())
     {
     
         do
         {
                 $technicens_responsables=$donnees_technicien['nom_techicien'];
     
    // Mettre ici si on est au derneir enregistrement, pas de virgule a la fin
     
    while($donnees_technicien = $reponse_technicien->fetch());
     
    }
    $chaine_intervenants=$chaine_intervenants.$technicens_responsables.',';
     }
    Merci pour des suggestions ?

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Pas besoin de savoir qui est le dernier. Il suffit de construire ton code comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ( $donnees_technicien = $reponse_technicien->fetch() ) {
        $chaine_intervenants = $donnees_technicien['nom_technicien'];
     
        while ( $donnees_technicien = $reponse_technicien->fetch() ) {
            $chaine_intervenants .= ',' . $donnees_technicien['nom_technicien'];
        }
    }
    Attention, tu as écrit nom_techicien dans ta requête.
    D'autre part, une requête SQL ne se construit pas par concaténation, elle se prépare.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Mieux :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $array_intervenants = array();
        while ( $donnees_technicien = $reponse_technicien->fetch() ) {
            $array_intervenants[] = $donnees_technicien['nom_technicien'];
        }
    $chaine_intervenants = implode( ', ', $array_intervenants);

    De fait, on peut aussi générer une liste :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $liste_intervenants = '<ul><li>' . implode( '</li><li>', $array_intervenants) . '</li></ul>';

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    tu peux aussi le faire directement en SQL :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT GROUP_CONCAT(nom_techicien, ', ') AS 'liste_intervenants' FROM lignetravaux_materiels_techniciens AS lmt INNER JOIN techniciens AS tc
     ON lmt.technicien_id=tc.technicien_id AND  lmt.bontravaux_id='. $id_bontravux

    Un peu de lecture : GROUP_CONCAT()

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    A noter : GROUP_CONCAT est spécifique à MySQL. Si ton application utilise un autre SGDB, renseigne-toi pour trouver l'équivalent.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 254
    Points : 69
    Points
    69
    Par défaut
    Bonjour
    J'ai choisis cette methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $reponse_desigantion=$bdd_MCHNMFT->query('SELECT GROUP_CONCAT(nom_techicien, ', ') AS "liste_intervenants" FROM lignetravaux_materiels_techniciens AS lmt INNER JOIN techniciens AS tc
     ON lmt.technicien_id=tc.technicien_id AND  lmt.bontravaux_id='. $id_bontravux);
     
     $donnee_intervenant =  $reponse_desigantion->fetch();
         $chaine_intervenant=$donnee_intervenant['liste_intervenants'];
    Maintenant ça me signale cette erreur

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: mode must be an integer' in C:\wamp\www\maintenance_CHNMFT\etat_pdf\sortie_pdf_jrnal_travaux.php on line 98
    PDOException: SQLSTATE[HY000]: General error: mode must be an integer in C:\wamp\www\maintenance_CHNMFT\etat_pdf\sortie_pdf_jrnal_travaux.php on line 98
    Je pense c'est la requête ou l'extration de la concaténation qui pose problème ?

  7. #7
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    254
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 254
    Points : 69
    Points
    69
    Par défaut
    C’était un problème de type sur la fonction GROUP_CONCAT(), aussi le séparateur par défaut est un virgule
    ca marche avec ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $reponse_desigantion=$bdd_MCHNMFT->query('SELECT GROUP_CONCAT(CAST(tc.nom_techicien AS CHAR)) AS "liste_intervenants" FROM lignetravaux_materiels_techniciens AS lmt INNER JOIN techniciens AS tc
     ON lmt.technicien_id=tc.technicien_id AND  lmt.bontravaux_id='. $id_bontravux);
     
     
     $donnee_intervenant =  $reponse_desigantion->fetch();
         $chaine_intervenant=$donnee_intervenant['liste_intervenants'];
    Merci c'est resolu

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

Discussions similaires

  1. [MySQL] Afficher dernier enregistrement avec GROUP BY
    Par Alexcontact dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/03/2017, 20h38
  2. Comment récupérer le dernier enregistrement avec MYSQLI ?
    Par Alexandrebox dans le forum Requêtes
    Réponses: 1
    Dernier message: 10/04/2009, 18h29
  3. [VB6] Savoir si un activeX est déjà enregistré avec regsvr32 ?
    Par Vince dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 04/08/2006, 12h38
  4. Réponses: 8
    Dernier message: 28/07/2006, 14h32
  5. [XPATH] Savoir si on est sur le dernier noeud de ce type ...
    Par DemonKN dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 14/03/2005, 13h13

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