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

PHP & Base de données Discussion :

[SQL] Double requête avec jointure


Sujet :

PHP & Base de données

Vue hybride

frakosun [SQL] Double requête avec... 15/01/2008, 14h00
alain.couthures Il faut utiliser dans le... 15/01/2008, 14h57
madevilts Je n'ai pas trop bien compris... 15/01/2008, 15h44
frakosun Merci pour vos réponses! ... 15/01/2008, 15h52
madevilts Alors je pense qu'il te faut... 15/01/2008, 16h19
frakosun merci mais ta requete ne... 15/01/2008, 18h11
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de frakosun
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Par défaut [SQL] Double requête avec jointure
    Bonjour à tous,

    voilà, j'en appelle à vos lumières pour m'aider sur une requete sql, parce que la je sèche.

    En gros j'ai un système de gestion d'articles avec 2 tables :
    - l'une avec les articles et plusieurs champs dont un "statut" (à 1 pour validé, 0 pour non validé) et id_membre
    - une autre avec les votes, plusieurs champs ont l'id membre du vote et l'id de l'article

    le concept est que pour etre publié un article doit avoir une moyenne de 5/10 sur 3 votes de membres. Tout se met à jour parfaitement via le script php, mais j'ai un problème pour personnaliser la liste des articles non évalués par membre.

    En fait je voudrais pouvoir lister les articles en attente de validation pour lequel le membre n'est pas l'auteur et n'a pas encore voté. (c'est la partie soulignée qui cloche)

    voici la requête que je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT * FROM articles 
    LEFT OUTER JOIN votes ON articles.id = votes.aid 
    WHERE articles.status = 0 
    AND articles.added_uid <> $uid 
    AND votes.uid = $uid IS NULL 
    ORDER BY articles.date_ajout DESC
    c'est le code en rose qui est mauvais...

    merci d'avance à ceux qui pourront m'aider!

  2. #2
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    Il faut utiliser dans le WHERE un "AND NOT(EXIST(SELECT ...))"

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Par défaut
    Je n'ai pas trop bien compris ton problème.

    il faut que votes.uid soit différent de $uid, c'est ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    votes.uid = $uid IS NULL

  4. #4
    Membre averti Avatar de frakosun
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Par défaut
    Merci pour vos réponses!

    en fait que je procède de cette façon il prend en compte l'intégralité des articles non-validés, je n'arrive pas à soustraires ceux pour lesquels un membre n'a pas voté :/

    edit pour madevilts> Oui mais pas exactement, et c'est pour celà que ma requete ne foncionne pas.


    En gros pour simplifier imagine qu'il ya 10 articles en attente de validation dans la base. le membre A en a déjà validé 5 en votant, donc je voudrais faire la requete qui puisse afficher les 5 restant qu'il lui reste à valider.

    Donc je fais une 1ere requete pour trouver les articles en attente de validation et dont le membre n'est pas l'auteur. Et dans ma 2ème requete je voudrais enlever de la liste les articles déjà validés mais ça coin....
    à mon avis c'est la méthodoligie qui est foireuse .

    merci

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Par défaut
    Alors je pense qu'il te faut faire la liste des article qui ne sont ni voté ni créé donc je pense que ça doit etre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * FROM articles
    LEFT JOIN votes ON articles.id = votes.aid //On lie les articles avec leurs votes s'il y en a
    WHERE articles.added_uid <> $uid //On enlève les articles qui ont été créés par l'utilisateur courant
    AND votes.uid <> $uid //On enlève les articles qui ont été déjà votés par l'utilisateur
    AND articles.statut = 0 //On ne garde que les articles qui n'ont pas été validés

  6. #6
    Membre averti Avatar de frakosun
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2007
    Messages : 54
    Par défaut
    merci mais ta requete ne retourne aucun résultat.. :/

    je ne comprend pas là.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Par défaut
    C'est fort possible.

    Commence par faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM articles
    LEFT JOIN votes ON articles.id = votes.aid
    Ceci doit te retourner tous les enregistrements qu'ils soient votés ou non et qu'ils soient validés ou non. Si tu n'as qu'une partie des non votés c'est que la jointure n'est pas bonne.

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

Discussions similaires

  1. Requête sql multi-source avec jointure en pur VBA dans excel
    Par guidav dans le forum Général VBA
    Réponses: 1
    Dernier message: 21/09/2013, 20h33
  2. Optimisation requête avec jointure externe SQL Server
    Par ICEMAN_60 dans le forum Développement
    Réponses: 2
    Dernier message: 28/11/2011, 10h08
  3. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum Développement
    Réponses: 5
    Dernier message: 18/09/2007, 15h38
  4. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/09/2007, 15h38
  5. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33

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