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

Langage SQL Discussion :

UNION imbriqués et jointures


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 58
    Points : 34
    Points
    34
    Par défaut UNION imbriqués et jointures
    Bonjour,

    J'aimerais regrouper deux requêtes en une seule et il me semble que je dois imbriquer des UNION mais je ne vois pas comment...

    Pour l'instant j'envoie des requêtes dans une boucle while ce qui n'est pas optimisé:

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    $sql = 'SELECT *
    	 FROM
    	(
    	-- Commentaires reçus par le user 57
    	SELECT c.id, c.sender,c.reference, c.opinion, c.commentaire, c.date, 
    		   u.login
    	FROM commentaires AS c
    	INNER JOIN user AS u ON u.id = c.sender
    	WHERE c.target = :idConsultedProfile
     
    	UNION
     
    	-- Commentaires envoyés par le user 57
    	SELECT c.id, c.sender,c.reference, c.opinion, c.commentaire, c.date,
    		   u.login
    	FROM commentaires AS c
    	INNER JOIN user AS u ON u.id = c.sender
    	WHERE c.sender = :idConsultedProfile
     
    	) AS tmp
    	ORDER BY reference DESC, date DESC
            ';
     
    $req = $dbh->prepare($sql);          
    $valeurs = array(':idConsultedProfile'=>$idProfile);
     
    $req->execute($valeurs);
    while($data = $req->fetch(PDO::FETCH_OBJ)):
     
     
    //Récupération des statuts statut1/statut2 pour chaque commentaire posté
    $reference = $data->reference;
     
    $sql = 'SELECT statut1, statut2
    	  FROM listing AS l
    	  WHERE l.id=:reference
     
              UNION
     
              SELECT statut1, statut2
    	  FROM listing_archive AS l_arch
    	  WHERE l_arch.id=:reference
    	  LIMIT 1
             ';
     
    	$req = $dbh->prepare($sql);         
    	$valeurs = array(':reference'=>$reference);
    	$req->execute($valeurs);
    	$donnees = $req->fetch(PDO::FETCH_OBJ);
    	$donnees->statut1;
    endwhile;
    Merci beaucoup pour votre aide!

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    déjà la 1ere requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT c.id, c.sender,c.reference, c.opinion, c.commentaire, c.date, u.login
    FROM commentaires AS c
    INNER JOIN user AS u ON u.id = c.sender
    WHERE c.target = :idConsultedProfile or c.sender = :idConsultedProfile
    ORDER BY reference DESC, date DESC

    Pour la 2eme requête il y a un problème fonctionnel.

    vous écrivez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT statut1, statut2
    FROM listing_archive AS l_arch
    WHERE l_arch.id=:reference
    LIMIT 1
    J'en déduis que vous avez plusieurs statut historisé selon une référence, mais le limit 1 va vous ramener n'importe quelle statut historisé.

    Là il faudrai que vous développiez un peu le fonctionnel car c'est pas clair.

Discussions similaires

  1. Réponses: 7
    Dernier message: 07/09/2008, 09h01
  2. union ou jointure ? avec where
    Par rouxfab dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 22/07/2008, 12h11
  3. Union ou jointure sur la meme table ?
    Par chris92 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 11/07/2007, 16h44
  4. UNION jointure etc... je patauge...
    Par Boumeur dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/03/2005, 22h45
  5. Réponses: 7
    Dernier message: 10/02/2005, 00h13

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