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 :

Probleme de requete avec simple jointure


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Points : 58
    Points
    58
    Par défaut Probleme de requete avec simple jointure
    Mon problème est assez simple.
    Tout d'abord mes tables:
    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
     
    --
    -- Structure de la table `messages`
    --
     
    CREATE TABLE `messages` (
      `id_message` int(8) NOT NULL AUTO_INCREMENT,
      `id_sujet` int(8) NOT NULL,
      `message_date` datetime NOT NULL,
      `message_texte` text NOT NULL,
      `message_pseudo` varchar(25) NOT NULL,
      `message_titre` varchar(30) DEFAULT NULL,
      PRIMARY KEY (`id_message`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
     
    --
    -- Contenu de la table `messages`
    --
     
    INSERT INTO `messages` (`id_message`, `id_sujet`, `message_date`, `message_texte`, `message_pseudo`, `message_titre`) VALUES
    (1, 1, '2009-03-11 18:39:19', 'Ceci est un test!', 'admin', '1er envoie!'),
    (2, 1, '2009-03-11 22:00:00', 'Ceci est la réponse!', 'david', '1ere réponse!!!'),
    (11, 2, '2009-03-12 19:07:53', 'Message apparaissant sur le sujet n*2', 'admin', 'sujet 2!'),
    (12, 2, '2009-03-12 19:07:53', 'réponse du sujet n*2', 'david', 'sujet 2 réponse!'),
    (13, 3, '2009-03-12 19:09:18', 'On ce refait un ptit coup avec le sujet n*3...', 'admin', '3ème sujet...'),
    (14, 3, '2009-03-12 19:09:18', 'on envoie ensuite la réponse...', 'david', 'la réponse');
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `sujets`
    --
     
    CREATE TABLE `sujets` (
      `id_sujet` int(8) NOT NULL AUTO_INCREMENT,
      `sujet_titre` varchar(30) NOT NULL,
      `sujet_date` datetime NOT NULL,
      `sujet_vues` int(8) NOT NULL,
      PRIMARY KEY (`id_sujet`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
     
    --
    -- Contenu de la table `sujets`
    --
     
    INSERT INTO `sujets` (`id_sujet`, `sujet_titre`, `sujet_date`, `sujet_vues`) VALUES
    (1, 'On test!', '2009-03-11 18:39:19', 20),
    (2, 'un deuxième pour la route!', '2009-03-12 09:00:00', 1),
    (3, 'Jamais 2 sans 3!!!!', '2009-03-15 15:00:00', 300);
    Ma requete posant problème est censée me sortir tous mes sujets avec le pseudo du créateur et le titre du 1er message.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DISTINCT s.id_sujet, sujet_titre, sujet_date, sujet_vues, message_pseudo, message_titre
    FROM sujets s, messages m
    WHERE m.id_sujet = s.id_sujet
    ORDER BY sujet_date
    Le problème vient du fait que le distinct n'a pas l'air de fonctionner car j'ai autant de ligne par id_sujet que de nombre de messages donc deux a chaque fois...
    Je remercie d'avance la / les personnes qui consacreront quelque temps a mon projet...

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    La requête fonctionne normalement, DISTINCT n'opère que sur l'ensemble du n-uplet.
    Si seulement tu faisais l'effort d'expliquer clairement ce que tu veux obtenir.

  3. #3
    ced
    ced est actuellement connecté
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 039
    Points : 23 787
    Points
    23 787
    Par défaut
    Pour ça, il va falloir passer par une sous-requête (ce qui nécessite une version de MySQL au moins égale à 4.1).
    Un exemple de ce type de requête est donnée dans les sources MySQL.

    ced

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Points : 58
    Points
    58
    Par défaut
    je m'explike chris, c'est un ptit forum que je crée donc
    j'ai fait les messages, je m'attaque maintenant au sujets(topics)
    donc j'ai fait ma table, rajouter l'identifiant id_sujet.
    mon but c'est faire une page qui m'affichera mes sujets avec le créateur etc... du coup je doit faire un petite jointure entre mes deux tables.
    Le seul problème c'est que la jointure fonctionne mais répete n fois le nom du sujet avec n = nombre de message du sujet.

    Ma version de mysql est 5.1 je croit...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 57
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par ced Voir le message
    Pour ça, il va falloir passer par une sous-requête (ce qui nécessite une version de MySQL au moins égale à 4.1).
    Un exemple de ce type de requête est donnée dans les sources MySQL.

    ced
    Merci du conseil ced, c'est plus ou moins ce que j'avais en tête, sauf que comme je suis un peu nul en mysql, je ne comprenais pas pourquoi le count ne passait pas sur ma requête principale
    je vais tenter ça tout de suite

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par Setsuna_00 Voir le message
    mon but c'est faire une page qui m'affichera mes sujets avec le créateur etc... du coup je doit faire un petite jointure entre mes deux tables.
    Le seul problème c'est que la jointure fonctionne mais répete n fois le nom du sujet avec n = nombre de message du sujet.
    Ce qui, je le répète, est le comportement normal d'une requête SQL.
    Ton problème est lié à l'exploitation du résultat, c'est à dire une classique gestion de rupture lors du parcours d'une liste.
    Dans ton code php tu initialises une variable :
    $auteur=NULL;
    Puis, dans le parcours du résultat de la requête, tu compares $auteur à la valeur correspondante de la ligne de résultat.
    S'il n'y a pas égalité tu affiches les infos de l'auteur puis tu mets l'identifiant de l'auteur dans $auteur.
    Puis, dans tous les cas, tu affiches le reste de la ligne.
    ligne suivante.

    C'est le niveau 0 de l'algorithmique.

Discussions similaires

  1. Probleme de requete avec jointure
    Par Apo75 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 03/06/2009, 17h21
  2. Probleme de requete avec jointure avec vb 2005
    Par napegadie dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/04/2007, 21h04
  3. Probleme de requetes avec SQLQuery
    Par Floverdoz dans le forum Bases de données
    Réponses: 19
    Dernier message: 01/06/2005, 16h43
  4. probleme de requete avec reprise du resultat :
    Par Maxoo dans le forum Langage SQL
    Réponses: 6
    Dernier message: 13/12/2004, 20h05
  5. requete avec 2 jointures
    Par bissy88 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/04/2004, 13h52

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