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

Zend_Db PHP Discussion :

peut etre une concaténation ?


Sujet :

Zend_Db PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 30
    Points : 32
    Points
    32
    Par défaut peut etre une concaténation ?
    Bonjour,
    j'aimerai pouvoir faire : un affichage comme ceci pour une personne en particulier

    id_p=1, id_plage=1, id_z, id_z, id_, id_z ... (ainsi de suite)
    id_p=1, id_plage=2, id_z, id_z, id_, id_z ... (ainsi de suite)

    Donc j'ai une table sesituer (id_p, id_pl, id_z) et je voudrais pouvoir regrouper pour une personne et une plage, toutes les zones.

    Le soucis : c'est qu'au niveau du select je ne peux pas précisier une plage en particulier car je veux que toutes les plages identiques se regroupent en une seule mais je ne sais pas combien il y a de fois plage=1 et compien de fois il y aura la plage 2 etc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $select->where("id_p=1", "id_pl=???");
    $datas= $this->_db->fetchAll($select);
    Merci de votre aide

  2. #2
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Bonsoir,
    Je ne comprends ni ton problème, ni ce que tu veux faire.

    Peux tu détailler d'avantage ?
    Merci

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 30
    Points : 32
    Points
    32
    Par défaut
    Bonjour,
    J'ai une table :
    se_situer(id_personne,id_plage, id_zone)

    qui a un lien avec ces 3 autres tables
    plage(id_plage, date, hdebut, hfin, commentaire)
    zone(id_zone,nom_zone)
    personne(id_personne,nom_personne)

    Une personne peut etre pendant une plage horaire dans plusieurs zones.

    Donc j'ai par exemple 3 enregistrement comme ca dans ma base de données :

    id_personne =1, id_plage =1, id_zone =1
    id_personne =1, id_plage =1, id_zone =2
    id_personne =1, id_plage =1, id_zone =3
    id_personne =1, id_plage =2, id_zone =25

    donc je voudrais pouvoir afficher :
    id_personne / id_plage/ id_zone (y en bien plusieurs)
    1 / 1 / 1,2,3
    1 / 2 / 25

    Mon id_personne je l'ai grace à ma session.
    Mais je voudrais donc récupérer toutes les zones de toutes les plages de cette personne et regroupé par id_personne et id_plage

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $select->where("id_p=1", "id_pl=???// je ne connais pas l'id_plage");
    $datas= $this->_db->fetchAll($select);
    j'espère avoir été claire parce que j'ai aucune piste pour faire ca.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Avec une seul requête je ne crois pas que tu aura le résultat voulu.

    une solution :
    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
     
    $db = Zend_Db_Table::getDefaultAdapter();
    $query = $db->select()
                       ->from('se_situer', array('id_personne','id_plage'))
                       ->where('id_personne = ?', $idp)
                       ->group('id_plage');
    $ar = $db->fetchAll($query);
     
    foreach ($ar as $key => $value)
    {
          $query = $db->select()
                       ->from('se_situer', array('id_zone'))
                       ->where('id_personne = ?', $idp)
                       ->where('id_plage = ?', $value['id_plage']);
          $ar_zone = $db->fetchCol($query);
          $ar[$key]['id_zone'] = implode(',', $ar_zone);
    }
    Il pourra y avoir d'autre solution plus simple .
    A la recherche d'un film : http://chercher-un-film.com

  5. #5
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Bonjour,
    je n'ai pas trop le temps en ce moment mais je te donne la requête de base qui devrait faire exactement ce que tu veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT id_personne, id_plage, GROUP_CONCAT(CAST(id_zone as CHAR)) as id_zone
    FROM se_situer
    GROUP BY id_personne;

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Super je savais pas que ca existe.

    Il lui faut seulement un autre group by avec plage_id
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT id_personne, id_plage, GROUP_CONCAT(CAST(id_zone as CHAR)) as id_zone
    FROM se_situer
    GROUP BY id_personne, id_plage;
    A la recherche d'un film : http://chercher-un-film.com

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/06/2009, 07h00
  2. Réponses: 4
    Dernier message: 02/02/2009, 22h03
  3. Réponses: 2
    Dernier message: 15/11/2007, 12h15
  4. Réponses: 8
    Dernier message: 11/08/2005, 09h32

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