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

Requêtes MySQL Discussion :

Jointure sur 2 tables


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Par défaut Jointure sur 2 tables
    Bonjour à tous,

    je reprends le pb de zéro. J'ai 2 requêtes comme suit :

    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
    		$sql = "SELECT SUM(tr.Duree) AS Somme 
     
    			FROM Comp_Traffic tr  
     
    			WHERE tr.id = '123' "
     
    		;
     
    		$somme = mysql_query($sql) or die('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error()); 
     
    		$heurePasse = $detail['Somme'];
     
    		$sql = "SELECT SUM(tra.Duree) AS SommeArchive
     
    			FROM Comp_TrafficArchive tra  
     
    			WHERE tra.id = '123' "
     
    		;
     
    		$somme = mysql_query($sql) or die('Erreur SQL !<br/>'.$sql.'<br/>'.mysql_error()); 
     
    		$heurePasse = $heurePasse + $detail['SommeArchive'];
    Je voudrais n'en faire qu'une pour optimiser les accès au serveur.
    Comment faire ?
    Des pistes? D'avance merci.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Si Comp_TrafficArchive est la table qui archive les anciennes données de Comp_Traffic, il suffit de faire un UNION ALL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT SUM(tmp.Duree) AS duree_totale
    FROM
    (
    	SELECT Duree
    	FROM Comp_Traffic
    	WHERE id = 123
    	UNION ALL
    	SELECT Duree
    	FROM Comp_TrafficArchive
    	WHERE id = 123
    ) tmp
    Bien entendu, si tu veux la somme des durées pour d'autres id, ne lance pas la requête autant de fois qu'il y a d'id mais fait un GROUP BY !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Par défaut
    Alors là chapeau bas l'artiste !

    100000000000000... Mercis ca fonctionne nickel !

    Question subsidiaire, puis-je avoir les SUM(Duree) individualisées, cad :
    SUM(Duree) pour Comp_Traffic et
    SUM(Duree) pour Comp_TrafficArchive
    en une seule requête ?
    Ca me faciliterai la tâche dans un autre script !

    Encore merci

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 'Comp_Traffic' AS origine,
    	SUM(Duree) AS total_duree
    FROM Comp_Traffic
    UNION ALL
    SELECT 'Comp_TrafficArchive',
    	SUM(Duree)
    FROM Comp_TrafficArchive
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 414
    Par défaut
    Comment fait-on pour aller + bas que bas quand le chapeau est déjà bas ?

    10e24 mercis

    Dernière question mais là on est dans la délicatesse intellectuelle !!!!

    Peut-on faire une requête qui regroupe UPDATE et SELECT ce qui me permettrait d'alléger les LOCK IN SHARE MODE, genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE Comp_init SET tempsPasse = ".$data['duree_totale']." WHERE SELECT ... la je ne sais plus !

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Il est possible de faire une jointure dans un UPDATE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE t1
    INNER JOIN t2 ON condition_de_jointure
    SET t1.une_colonne = une_nouvelle_valeur
    WHERE conition_de_restriction
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

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

Discussions similaires

  1. jointure sur 3 tables
    Par jojo22222 dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/01/2006, 22h47
  2. Jointure sur 3 tables
    Par tonymontana4192 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/11/2005, 13h24
  3. [MySQL] Jointure sur une table déjà jointe
    Par genova dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/10/2005, 23h54
  4. jointure sur TROIS tables
    Par caribou_belle dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/03/2004, 11h20
  5. Jointure sur 2 tables de bases différentes
    Par Celina dans le forum Langage SQL
    Réponses: 10
    Dernier message: 10/11/2003, 11h56

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