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 :

Requetes imbriquées


Sujet :

Zend_Db PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut Requetes imbriquées
    Salut

    D'après vous est-il possible d'écrire une requête comme celle ci avec zend_db et select() ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select * from (
        select * from reservations where date_fin >= NOW()
    ) as r
    join (
      select * from clients where concat(prenom,' ',nom) like 'isab%'
      ) as c
    on r.id_client = c.id
    Pour info voila mon code actuel (qui en fonctionne donc pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $query = $db_reservations->select()
                ->setIntegrityCheck(false)
                ->from(
                        $db_reservations->select()->from(array('r'=>'reservations'),array('id_resa' => 'id' , 'chambre' , 'date_debut' , 'date_fin' , 'periode_jrs' => 'DATEDIFF(date_fin, date_debut )' , 'jrs_restants' => 'DATEDIFF(date_fin, NOW() )'))
                        ->where('date_fin >= NOW()')
                      )
                ->join(new Zend_Db_Expr('('.
                    $db_reservations->select()
                    ->from('clients', array('id_client' => 'id' , 'client_nom' => 'nom' , 'client_prenom' => 'prenom'))
                .')'),'r.id_client = c.id')
            ;
    Et voila la requête générée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `t`.*, `t_2`.* FROM (SELECT `r`.`id` AS `id_resa`, `r`.`chambre`, `r`.`date_debut`, `r`.`date_fin`, DATEDIFF(date_fin, date_debut ) AS `periode_jrs`, DATEDIFF(date_fin, NOW() ) AS `jrs_restants` FROM `reservations` AS `r` WHERE (date_fin >= NOW())) AS `t` INNER JOIN () AS `t_2` ON r.id_client = c.id

  2. #2
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Bonjour,

    l'exemple ne me parait pas très adapté... N'aurais tu pas le même résultat avec la requête nettement plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM reservations AS r
        JOIN clients AS c ON r.id_client = c.id
    WHERE r.date_fin >= NOW()
        AND concat(c.prenom, ' ', c.nom) like 'isab%'
    Mais si tu veux vraiment utiliser des sous-requêtes, essaie le code suivant (non testé, mais ça devrait fonctionner) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $resaSubSelect = $db->select()
        ->from(array('r'=>'reservations'),
                    array('id_resa' => 'id' , 'chambre' , 'date_debut' , 'date_fin' , 'periode_jrs' => 'DATEDIFF(date_fin, date_debut )' , 'jrs_restants' => 'DATEDIFF(date_fin, NOW() )'))
        ->where('date_fin >= NOW()');
     
    $clientsSubselect = $db->select()
        ->from('clients',
                    array('id_client' => 'id' , 'client_nom' => 'nom' , 'client_prenom' => 'prenom'));
     
    $query = $db->select()
        ->from(array('r' => $resaSubSelect))
        ->join(array( 'c' => $clientsSubselect), 'r.id_client = c.id');

  3. #3
    Membre confirmé Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    Le pb en faisant un join comme ceci c'est que je ne peut pas faire de where sur les deux tables, exemple : (WHERE r.date_debut>now() AND c.id = 5)

    Je vais regarde pour ton code, merci en tout cas !

  4. #4
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Citation Envoyé par kreatik Voir le message
    Le pb en faisant un join comme ceci c'est que je ne peut pas faire de where sur les deux tables, exemple : (WHERE r.date_debut>now() AND c.id = 5)
    Je ne comprend pas ce que tu veux dire... Pourquoi ne pourrais-tu pas ?

  5. #5
    Membre confirmé Avatar de kreatik
    Inscrit en
    Juin 2007
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 94
    Par défaut
    je voulais dire par là que je n'ai pas accès aux alias crées auparavant.

Discussions similaires

  1. [requete] requete imbriquée
    Par karamazov994 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 17h54
  2. Requete imbriquée, oui mais...
    Par zax-tfh dans le forum Requêtes
    Réponses: 6
    Dernier message: 24/03/2005, 01h48
  3. Equivalent d'une requete imbriquée ??
    Par webtheque dans le forum Requêtes
    Réponses: 8
    Dernier message: 31/08/2004, 10h07
  4. Requetes imbriquées et jointures
    Par Emile Le Tueur* dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/03/2004, 23h12
  5. Requete imbriquée sur Firebird ou Interbase
    Par Thib dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 09h00

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