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 :

Requête sur 2 tables avec même colonne


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut Requête sur 2 tables avec même colonne
    Bonjour à tous,

    Je sais que c'est un sujet souvent abordé, mais il se trouve que j'ai du mal avec les jointures de tables, donc j'ai besoin d'une aide pédagogique
    Je voudrais faire une recherche sur 2 tables (sorte de mini-forum), l'une "sujets", l'autre "reponses", ayant toutes deux une colonne "message".
    Comment adapter la requête mysql pour aller chercher l'info sur les 2 tables en même temps, tout en privilégiant la première en cas de résultat ?
    Par exemple, si j'ai le mot "chien" dans la colonne "message" de chaque table, seul le résultat de la table "sujets" ressort.
    Vaut-il mieux utiliser UNION, JOINT ou 2 select dans un select ?
    Merci d'avance pour vos conseils éclairés !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 108
    Points : 28 419
    Points
    28 419
    Par défaut
    Peut-être qu'en nous donnant la structure des tables et un petit jeu d'essai (quelques lignes de chaque table, le résultat attendu), ta demande serait un peu plus claire...

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 898
    Points : 53 139
    Points
    53 139
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Freedolphin Voir le message
    ...
    Vaut-il mieux utiliser UNION, JOINT ou 2 select dans un select ?
    Merci d'avance pour vos conseils éclairés !
    Tout dépend de la structure de vos tables.... Commencez par poster le DDL de ces tables (ordre CREATE TABLE ...)

    A +

  4. #4
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Bon alors, en fait, j'ai résolu le problème en revoyant la structure de la table et en n'en faisant plus qu'une.
    Désolé du dérangement, est-ce qu'un modérateur peut supprimer ce post ?
    Merci et bon week-end.

  5. #5
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Bonjour,

    Je reviens avec mon problème (car un souci en chasse un autre) et j'inverse la problématique : faire 2 requêtes sur une même table.
    Donc pour en revenir à ma table, celle-ci s'appelle "messages" et comporte à la fois des questions (avec une colonne "type" (sujet) et un id) et des réponses (avec une colonne "type" (reponse) et une colonne "idsujet" se rapportant à l'id de la question).
    J'aimerais faire ressortir les questions qui n'ont pas de réponse.

    Voici un code qui fonctionne très bien :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = mysql_query("SELECT id FROM messages WHERE type='sujet' ORDER BY num DESC"); 
    while($data = mysql_fetch_assoc($sql))
    {
    //on calcule le nbre de reponses par sujet
    $req = mysql_query("SELECT * FROM messages WHERE type='reponse' AND idsujet='$data[id]'");
    $total = mysql_num_rows($req);
    if($total==0) echo "on affiche les sujets";
    }

    Mais il ne permet pas de limiter les résultats ni de les paginer.
    Je cherche à faire une seule requête, probablement avec une jointure. Et c'est là que je bloque.
    J'ai essayé ceci, mais les jointures sont toujours aussi complexes pour moi.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = mysql_query("SELECT s.id AS id, r.idsujet AS idsujet FROM messages AS s INNER JOIN messages AS r WHERE r.idsujet = s.num ORDER BY s.num DESC LIMIT 0,15");

    Je n'ai évidemment aucun résultat, je sens bien qu'il manque un truc ! Peut-être avec UNION ? Avez-vous un conseil ? Merci !

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 898
    Points : 53 139
    Points
    53 139
    Billets dans le blog
    6
    Par défaut
    Commencez par poster le DDL de ces tables (ordre CREATE TABLE ...)

    Le PHP n'est pas du SQL !

    A +

  7. #7
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 108
    Points : 28 419
    Points
    28 419
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Peut-être qu'en nous donnant la structure des tables et un petit jeu d'essai (quelques lignes de chaque table, le résultat attendu), ta demande serait un peu plus claire...

  8. #8
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    C'est pourtant bien des requêtes sql que j'ai affiché mais bon...
    La structure de la table "messages" est la suivante :
    id
    type
    titre
    texte
    idsujet

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 898
    Points : 53 139
    Points
    53 139
    Billets dans le blog
    6
    Par défaut
    Dans ce que vous avez donné comme code :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = mysql_query("SELECT id FROM messages WHERE type='sujet' ORDER BY num DESC"); 
    while($data = mysql_fetch_assoc($sql))
    {
    //on calcule le nbre de reponses par sujet
    $req = mysql_query("SELECT * FROM messages WHERE type='reponse' AND idsujet='$data[id]'");
    $total = mysql_num_rows($req);
    if($total==0) echo "on affiche les sujets";
    }
    Seul 2 lignes contiennent une requête.... et nous ne savons pas comment sont constituées les tables.... Si vous ne savez pas distinguer une requête SQL et du code PHP.... ça va pas être facile !

    A +

  10. #10
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Merci de vos remarques toujours aussi sympathiques.
    J'ai déjà donné la structure de la table.
    Les requêtes sont incluses dans le code PHP. Votre signature longue comme le bras devrait vous permettre de le comprendre.
    Je vous propose de passer votre chemin et de laisser répondre les gens qui s'y connaissent.

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 898
    Points : 53 139
    Points
    53 139
    Billets dans le blog
    6
    Par défaut
    La structure d'une table doit comporter le type de données et les contraintes. Je ne voit ni l'un ni l'autre.... Accessoirement les index définit sur cette table.

    A +

  12. #12
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Je poste ici la solution à mon problème, trouvée avec l'aide d'un ami bienveillant et chaleureux.
    J'ai finalement utilisé une sous-requête, peut-être qu'on peut optimiser avec une jointure, mais en tout cas j'ai le résultat escompté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT s.id FROM messages s WHERE s.id NOT IN (SELECT r.idsujet FROM messages r WHERE r.type='reponse') AND s.type='sujet' LIMIT 0,15

  13. #13
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 108
    Points : 28 419
    Points
    28 419
    Par défaut
    Transmets mes félicitations à cette personne.
    Si tu ne lui as communiqué que les informations présentes dans cette discussion, il fait preuve de sacrés dons de voyance...

  14. #14
    Membre actif
    Avatar de Freedolphin
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2006
    Messages
    291
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2006
    Messages : 291
    Points : 225
    Points
    225
    Par défaut
    Voyant ou compétent... Gardez vos sarcasmes et posez-vous les bonnes questions.

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

Discussions similaires

  1. Requête sur 2 tables en même temps
    Par DelphiCool dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/10/2008, 21h18
  2. Requête sur plusieurs tables avec DLookup ?
    Par Falcdyr dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 07/05/2008, 08h50
  3. Réponses: 4
    Dernier message: 05/03/2008, 09h32
  4. problème sur requête sur 3 tables avec une somme
    Par tomguiss dans le forum Requêtes
    Réponses: 4
    Dernier message: 27/12/2007, 16h44
  5. Requête sur deux tables en même temps
    Par will89 dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/04/2006, 11h01

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