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 :

Problème de requête multi tables


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème de requête multi tables
    Bonjour,
    J'utilise 4 tables :
    1 - table avis (id_avis, nom, prenom)
    2 - table bougie (id_bougie, id_avis, date_ajout)
    3 - table photo (id_photo, id_avis, date_ajout)
    4 - table message (id_message, id_avis, date_ajout)
    les champs bougie.id_avis, photo.id_avis, message.id_avis correspondent avec le champ avis.id_avis

    Je cherche à récupérer les derniers enregistrements effectués (par date_ajout DESC) sur les tables bougie, photo et message.
    Un utilisateur peut insérer une bougie, sans insérer photo et message.
    Un utilisateur peut insérer photo, sans insérer bougie et message.
    Un utilisateur peut insérer bougie, photo et message...

    En clair, comment faire un tri par date_ajout sur les 3 tables bougie, photo et message ?

    Acutellement, j'en suis là mais ça ne trie pas correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT avis.nom, avis.id_avis, avis.prenom
    FROM avis, bougie, photo, message WHERE
    (avis.id_avis IN
    (SELECT bougie.id_avis FROM bougie ORDER BY bougie.date_ajout DESC)) OR
    (avis.id_avis IN
    (SELECT photo.id_avis FROM photo ORDER BY photo.date_ajout DESC)) OR
    (avis.id_avis IN
    (SELECT message.id_avis FROM message ORDER BY message.date_ajout DESC))
    AND (avis.id_avis = bougie.id_avis OR avis.id_avis = photo.id_avis OR avis.id_avis = message.id_avis)
    AND bougie.valid = 1 AND photo.valid = 1 AND message.valid = 1
    GROUP BY avis.nom
    ORDER BY bougie.date_ajout DESC, photo.date_ajout DESC, message.date_ajout DESC
    LIMIT 10
    Merci d'avance de votre aide.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut PRoblème résolu
    A titre d'information et après de nombreux essais, j'ai fini par trouver la solution.
    Je vous la donne et n'hésitez pas à me faire part de vos remarques quant à l'optimisation de cette requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT * FROM (
    (SELECT bougie.id_avis as idn, bougie.date_ajout as dte, avis.id_avis, avis.nom, avis.genre, avis.prenom, avis.localite, avis.private FROM bougie, avis WHERE bougie.valid=1 AND avis.id_avis=bougie.id_avis GROUP BY bougie.id_avis ORDER BY bougie.date_ajout DESC LIMIT 10)
    UNION ALL
    (SELECT message.id_avis as idn, message.date_ajout as dte, avis.id_avis, avis.nom, avis.genre, avis.prenom, avis.localite, avis.private FROM message, avis WHERE message.valid=1 AND avis.id_avis=message.id_avis GROUP BY message.id_avis ORDER BY message.date_ajout DESC LIMIT 10)
    UNION ALL
    (SELECT photo.id_avis as idn, photo.date_ajout as dte, avis.id_avis, avis.nom, avis.genre, avis.prenom, avis.localite, avis.private FROM photo, avis WHERE photo.valid=1 AND avis.id_avis=photo.id_avis GROUP BY photo.id_avis ORDER BY photo.date_ajout DESC LIMIT 10)) AS tmp
    GROUP BY idn
    ORDER BY dte DESC
    LIMIT 10
    Ca trie d'abord les 10 + récents resultats de chaque table (bougie, photo, message), ensuite ca me groupe les résultats par id (table avis), et ca me trie les 10 + récents résultats.

    Si ça peut servir....

    Bon dimanche

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

Discussions similaires

  1. Requête multi-tables :S
    Par plutonium719 dans le forum Développement
    Réponses: 4
    Dernier message: 12/03/2008, 16h41
  2. modifier des données dans une requête multi table
    Par Bluman dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/02/2008, 10h00
  3. PB requête multi-tables
    Par duchnok dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/01/2008, 12h25
  4. Requête multi-tables avec BDE
    Par Ptit_bouchon dans le forum Bases de données
    Réponses: 9
    Dernier message: 03/01/2008, 12h58
  5. problème de requête multi-table
    Par dergips dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/07/2007, 18h21

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