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 :

Joindre deux requêtes


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut Joindre deux requêtes
    Bonjour,

    je bute depuis quelques temps pour joindre deux requêtes, pour le moment j'ai ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    FROM table1 
    ORDER BY time DESC 
    LIMIT 0, 5'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    FROM table2 
    ORDER BY time DESC 
    LIMIT 0, 5
    Si c'est possible je voudrais que ces requêtes n'en fassent qu'une.

    J'ai essayé ceci mais ça ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * 
    FROM table1, table2 
    ORDER BY time 
    DESC LIMIT 0, 5
    Merci de vos réponse! =)

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Il nous faut le schéma des tables pour pouvoir vous aider et un peu plus de détail sur leur structure.
    Sinon, commencez par jeter un œil sur ce tutoriel : http://sqlpro.developpez.com/cours/sqlaz/jointures/

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Schéma de mes tables:

    table1
    id
    id_n
    contenu
    time

    table2
    id
    id_t
    contenu
    time

    Je voudrai donc selectionner id_n, contenu, time de la table1 et id_t, contenu, time de la table2 puis trier grâce à time et faire une limite de 5

  4. #4
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    De ce que je crois comprendre il n'y a aucun lien entre tes 2 tables. Tu ne souhaite pas avoir l'enregistrement de la table 2 qui correspond à celui de la table 1.

    Tu veux juste l'ensemble de la table 1, puis l'ensemble de la table 2, le tout trier par time et prendre seulement les 5 premiers ?

    Si c'est bien ça, c'est pas une jointure qu'il faut faire mais une union.

    Quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * FROM
        (SELECT id_t as MyID, contenu, time FROM table1
         UNION
         SELECT id_n as MyID , contenu, time FROM table2)
    ORDER BY time DESC
    LIMIT 0,5
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    J'ai fait la requête comme tu ma dit mais je ne peut plus utiliser les variables id_t et id_n es-que c'est normal ?

    Undefined index: id_t
    Undefined index: id_n

  6. #6
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 193
    Points : 28 077
    Points
    28 077
    Par défaut
    Erreur de ma part, il faut les inverser

    Il faut mettre id_n sur la sous-requete de table1 et id_t sur la sous-requete de table2
    --- Sevyc64 ---

    Parce que le partage est notre force, la connaissance sera notre victoire

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    J'avais déjà fait cet inversement et j'ai le même problème

  8. #8
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Il y a un lien entre les 2 tables ?
    Peux-tu nous donner un exemple des données dans chaque table et ce que tu souhaites obtenir en sortie de requête ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Non il n'y a pas vraiment de lien entre les deux tables

    sevyc64 a bien compris ce que je veux:
    Tu veux juste l'ensemble de la table 1, puis l'ensemble de la table 2, le tout trier par time et prendre seulement les 5 premiers ?


    table1
    id = id d'un commentaire
    id_n = id d'une news liée à ce commentaire
    contenu = contenu du commentaire
    time = heur de post

    table2
    id = id d'un commentaires
    id_t = id d'un sujet liée à ce commentaire
    contenu = contenu du commentaire
    time = heur du post

    Ce que je veux c'est faire une rubrique qui va afficher le lien (vers la news ou vers le sujet) des commentaires les plus récents, c'est à dire les 5 derniers posté.

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    La requête de sevyc64, avec sa correction, devrait fonctionner, pour autant que tes tables s'appellent bien comme ça, ce qui est sémantiquement peu pratique !

    Par contre, pour répondre à ton besoin final :
    Ce que je veux c'est faire une rubrique qui va afficher le lien (vers la news ou vers le sujet) des commentaires les plus récents, c'est à dire les 5 derniers posté.
    La requête UNION va considérer de manière identique et mettre dans la même colonne les id_n et id_t. Comment ton système va t-il ensuite savoir s'il s'agit de l'identifiant d'une news ou d'un sujet ?
    Il manque dans ta requête les jointures avec les tables des news et des sujets, ainsi que les colonnes contenant l'URL de la news ou du sujet.

    Donne nous le résultat des requêtes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE nom_de_la_table
    pour qu'on puisse t'aider à mieux construire ta requête sans erreur.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2009
    Messages : 26
    Points : 26
    Points
    26
    Par défaut
    Bonjour
    As tu testé un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT id, id_n, NULL AS id_t, contenu, time
    FROM table1
    UNION
    SELECT id, NULL AS id_n, id_t, contenu, time
    FROM table2
    Tu devrais avoir tout ce que tu veux avec ça.
    Mais tu risques d'avoir des problèmes si les identifiants de la table1 sont les mêmes que ceux de la table2

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Je vais vous donner toutes les tables que j'ai créé vous comprendrez surement mieux après cela:

    Table news:
    id_news => 1
    titre_news => un_titre
    createur_news => un_createur
    contenu_news => un_contenu
    time_news => une_date
    nbr_coms_news => 1

    Table news_commentaires
    id_coms => 1
    id_news => 1
    createur_coms => un_createur
    contenu_coms => un_contenu
    time_coms => une_date

    Table tutoriel
    id_tutoriel=> 1
    titre_tutoriel => un_titre
    createur_tutoriel => un_createur
    contenu_tutoriel => un_contenu
    time_tutoriel => une_date
    nbr_coms_tutoriel

    Table tutoriel_commentaires
    id_coms => 1
    id_tutoriel => 1
    createur_coms => un_createur
    contenu_coms => un_contenu
    time_coms => une_date
    Je pense que le problème qui va se poser c'est qu'il est sur que à un moment id_news soit égal à id_tutoriel et id_coms à id_coms de la deuxième table.

  13. #13
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Avec la requête de marochlo, tu pourras détecter, selon la colonne qui est à NULL, si la ligne est celle d'une news ou d'un tutoriel.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Merci à vous! Ça marche nickel maintenant.

    Table news:
    id_news => 1
    titre_news => un_titre
    createur_news => un_createur
    contenu_news => un_contenu
    time_news => une_date
    nbr_coms => 1

    Table tutoriel
    id_tutoriel=> 1
    titre_tutoriel => un_titre
    createur_tutoriel => un_createur
    contenu_tutoriel => un_contenu
    time_tutoriel => une_date
    nbr_coms => 1
    J'aurais une autres question, avec ces deux tables comment es que je peut les assembler puis trier grâce à "nbr_coms" ? Merci

  15. #15
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Que veux-tu dire par "assembler" ?
    Les fusionner en une seule table ?

    Que représente nbr_coms ? Ils ont la même valeur dans tes deux tables semble t-il alors pour le tri...
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  16. #16
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 6
    Points
    6
    Par défaut
    Je voudrais récupérer tous le contenu des deux tables et trier grâce à "nbr_coms" qui est une valeur qui s'incrémente de +1 si un commentaires est posté. C'est pour récupérer les 5 derniers sujets (news et tutoriel) qui ont le plus de commentaires.

  17. #17
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et ce n'est pas ce que fait la requête UNION ?
    Ou alors je n'ai toujours pas compris !

    Un jeu de données et le résultat souhaité serait peut-être utile.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

Discussions similaires

  1. [MySQL] Joindre deux requêtes
    Par Lobby dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 17/08/2010, 12h54
  2. Réponses: 1
    Dernier message: 16/09/2009, 13h30
  3. joindre deux tables créées par requêtes
    Par bernard6 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/04/2007, 11h27
  4. Réponses: 4
    Dernier message: 11/10/2005, 10h17
  5. [VB6]Joindre deux recordsets en un seul
    Par elifqaoui dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 11/06/2003, 21h06

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