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 :

afficher des données non présente dans une table (ou différence) [PDO]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    fais ce que je peux en n'informatique
    Inscrit en
    Janvier 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : fais ce que je peux en n'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 60
    Points : 30
    Points
    30
    Par défaut afficher des données non présente dans une table (ou différence)
    Bonjour,
    Je mets en place une gestion de News de clients

    (Un membre peut gérer 1 à plusieurs clients
    Un client peut être géré par 1 à plusieurs membres)

    L'idée est d'afficher un formulaire fiche-client dans lequel je liste les news (en 2 parties) de ce client
    Partie 1 : News non lu par ce membre
    Partie 2 : News lu par ce membre

    Pour la partie 2, j'ai créé une table de liaison entre membre et news. Lorsque le membre coche la checkbox de cette news, elle passe en lu => Pas de problème.

    Pour la partie 1, je ne parviens pas à afficher uniquement les news non lu de ce membre pour ce client

    Voici mes tables (simplifiées)
    client : client_id, nom, logo

    news : news_id, client_id, titre, date, contenu
    (1 client peut avoir plusieurs News)

    membre : membre_id, pseudo


    tables de liaison
    x_membre_client : membre_client_id, client_id, membre_id
    (1 membre peut gérer 1 à plusieurs clients
    1 client peut être géré par 1 à plusieurs membres)


    x_membre_news : membre_news_id, membre_id, news_id
    (table affichant les news déjà lu par le les membres)


    Merci de votre aide

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 198
    Points : 8 421
    Points
    8 421
    Billets dans le blog
    17
    Par défaut
    Il faut faire un LEFT OUTER JOIN entre la data clients/membres/news et la data x_membre_news
    La colonne membre_news_id à NULL indique une news non lue par le membre
    Donne un extrait de ta bdd simplifiée pour tests si besoin

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    fais ce que je peux en n'informatique
    Inscrit en
    Janvier 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : fais ce que je peux en n'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Merci Séb.
    C'est le OUTER qui manquait dans mes requêtes. Je vais plancher la dessus.

    Je ne pensais pas que c'était possible d'avoir membre_news_id = à NULL car il s'agit d'une clé primaire

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    fais ce que je peux en n'informatique
    Inscrit en
    Janvier 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : fais ce que je peux en n'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    j'ai tenté plusieurs façons, avec des LEFT, RIGHT, FULL, INNER, OUTER. J'ai plein de résultats différent mais jamais ceux que je devrait obtenir

    voici mes données

    table news
    Nom : news.PNG
Affichages : 145
Taille : 14,8 Ko

    table x_membre_news
    Nom : membre_news.PNG
Affichages : 140
Taille : 4,8 Ko

    table membre
    Nom : membre.PNG
Affichages : 142
Taille : 30,7 Ko

    table x_membre_client
    Nom : x_membre_client.PNG
Affichages : 138
Taille : 4,6 Ko

    table client
    Nom : client.PNG
Affichages : 137
Taille : 17,9 Ko

    voici le MRD fait sur access (pas tout à fait identique à la BDD MySQL)
    Nom : MRD.PNG
Affichages : 135
Taille : 33,2 Ko



    Requête qui permet d'afficher les 3 news (news_id : 2,3 et 4) formulaire client/news.php=?p=2&c=2
    c = $client
    p = $membre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $client_news_jamais_lu=$db->prepare ('SELECT * FROM article_news
    WHERE article_news.client_id = :client');
    $client_news_jamais_lu->bindValue(':client',$client,PDO::PARAM_INT);
    Nom : toutes.PNG
Affichages : 145
Taille : 22,3 Ko



    Requête qui permet d'afficher la liste des news lu (news_id : 4 )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $client_news_lu=$db->prepare ('SELECT * FROM article_news
    RIGHT JOIN x_membre_client_news_lu ON article_news.news_id = x_membre_client_news_lu.news_id
    WHERE x_membre_client_news_lu.client_id = :client AND x_membre_client_news_lu.news_lu = 1 AND x_membre_client_news_lu.membre_id = :id
    ORDER BY x_membre_client_news_lu.news_id ASC');
    $client_news_lu->bindValue(':client',$client,PDO::PARAM_INT);	
    $client_news_lu->bindValue(':id',$id,PDO::PARAM_INT);
    Le résultat est bon
    Nom : news lu.PNG
Affichages : 137
Taille : 10,9 Ko



    Il faudrait que j'arrive à afficher les news (news_id : 2 et 3). La dernière requête testé.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $test=$db->prepare ('SELECT * FROM article_news
    LEFT OUTER JOIN x_membre_news ON article_news.news_id = x_membre_news.news_id
    LEFT OUTER JOIN membre ON x_membre_news.membre_id = membre.membre_id
    LEFT OUTER JOIN x_membre_client ON membre.membre_id = x_membre_client.membre_id		
    WHERE article_news.client_id = :client
    Nom : test.PNG
Affichages : 134
Taille : 11,6 Ko
    Images attachées Images attachées   

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    fais ce que je peux en n'informatique
    Inscrit en
    Janvier 2012
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : fais ce que je peux en n'informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2012
    Messages : 60
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Après avoir posé toutes les tables rempli sur table pour mieux visualiser ce que j'ai et ce que je cherche, j'ai trouvé la solution

    La requête est plus simple que ce que j'imaginais, puisque aucune jointure n'est utile du fait que j'utilise 2 variables (id pour membre et client)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $test=$db->prepare ('SELECT * FROM article_news
    WHERE (news_id) NOT IN (SELECT news_id FROM x_membre_news WHERE x_membre_news.membre_id =:id) AND article_news.client_id = :client');

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/09/2008, 19h17
  2. Récupérer des lignes non enregistrées dans une table
    Par leddy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 24/04/2008, 15h09
  3. Réponses: 5
    Dernier message: 06/02/2007, 13h46
  4. récupération des id non présente dans une CIF
    Par Zen_Fou dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/04/2006, 12h00
  5. [VBA-E]Transfere des données d'Excel dans une table Access
    Par flo83 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/04/2006, 09h22

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