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 :

Recherche des commentaires non répondus


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Recherche des commentaires non répondus
    bonjour,

    voici mon pb: afficher les commentaires laissés sur une annonce qui n'ont pas reçu de réponse de l'auteur (de l'annonce).

    ce que j'arrive à faire c'est afficher tous les commentaires sans réponses de l'auteur mais dès qu'il répond à un commentaire sur une annonce A, le commentaire sans réponse sur l'annonce B disparaît aussi.

    ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $reqCommentaire = $pdo->prepare('SELECT c.*, a.id id_annonce, a.membre_id, a.titre AS titre_annonce
            FROM commentaire c
            JOIN membre m ON m.id = c.membre_id
            JOIN annonce a ON a.id = c.annonce_id
            WHERE a.membre_id = ' . $_GET['id'] . '
            AND c.membre_id != ?
            AND c.date_enregistrement > (SELECT MAX(c.date_enregistrement)
                                        FROM commentaire c
                                        JOIN annonce a ON a.membre_id = c.membre_id
                                        ORDER BY c.date_enregistrement DESC)
            ORDER BY c.date_enregistrement DESC
            ');
    j'ai bien essayé de faire un GROUP BY a.id mais rien à faire

    merci de votre aide..

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    quand vous parlez de l'auteur qui n'a pas répondu, est ce qu'il n'a pas répondu à l'annonce ou pas répondu à un commentaire ?

  3. #3
    Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    l'auteur de l'annonce qui n'a pas répondu au commentaire laissé sur son annonce

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    comment est stocké dans la table "commentaire" le fait qu'un commentaire ait eu une réponse ?

  5. #5
    Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    justement ya rien de prévu par défaut. tout le monde poste un commentaire via le même bouton
    j'ai bien pensé ajouter un bouton "réponse" au commentaire pour les différencier en ajoutant un champ "niveau de réponse" un truc comme ça, mais on m'a dit que c'était pas la peine
    vous pensez que c'est indispensable? et comment je peux faire?

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    donc les personnes ne répondent pas à un commentaire mais à une annonce puisque la réponse est un commentaire associé à une annonce.
    donc pour savoir si l'auteur de l'annonce a répondu à tout, cela revient à chercher le dernier commentaire et regarder si le membre du commentaire est le même que le membre de l'annonce.

    pour le moment je m'approche des informations recherchée avec cette requête.
    mais cela fait longtemps que je n'ai plus fait de requêtes donc je ne sais pas s'il est possible d'avoir les information du dernier commentaire par annonce avec un "GROUP BY" et sans sous-requête.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT
          A.id AS id_Annonce
        , A.membre_id AS membre_id_Annonce
        , C.membre_id AS membre_id_Commentaire
        , C.date_enregistrement AS date_enregistrement_Commentaire
    FROM annonce AS A
    JOIN commentaire AS C
        ON C.annonce_id = A.id
    ORDER BY
          A.id ASC
        , C.date_enregistrement ASC

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par mathieu Voir le message
    donc les personnes ne répondent pas à un commentaire mais à une annonce puisque la réponse est un commentaire associé à une annonce.
    donc pour savoir si l'auteur de l'annonce a répondu à tout, cela revient à chercher le dernier commentaire et regarder si le membre du commentaire est le même que le membre de l'annonce.
    Je ne pense pas qu'on puisse faire ce raccourci : ce n'est pas par ce que le dernier commentaire est celui de l'auteur de l'annonce, que ce commentaire tient bien compte du commentaire le plus récent.
    Exemple : l'annonceur commence à répondre au dernier commentaire affiché, mais il prend du temps pour le faire, et avant qu'il ait fini sa réponse, d'autres commentaires sont ajoutés.

    Il y a donc un problème de conception dans la BDD, il faut pouvoir associer un commentaire à un autre.

    J'en profite pour critiquer la requête initiale, dans laquelle il y a un select C.* à remplacer par les colonnes utiles de la table C
    Vous y gagnerez en stabilité du résultat et en performances
    Personnellement je préfère aussi mentionner INNER JOINplutôt que JOIN tout court, l'explicite me semble toujours plus clair que l'implicite

  8. #8
    Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    merci escartefigue, je pense aussi qu'il faut modifier la table, du coup j'ai ajouté un champ "reponse_id" à commentaire
    mais quand je fais cette requete pour récupérer les derniers commentaires laissé sans réponse:
    Cardinality violation: 1242 Subquery returns more than 1 row >> sur l'execute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // récupération des commentaires laissés au membre
    $reqCommentaire = $pdo->prepare('SELECT c.*, a.id id_annonce, a.membre_id, a.titre AS titre_annonce
            FROM commentaire c
            INNER JOIN membre m ON m.id = c.membre_id
            INNER JOIN annonce a ON a.id = c.annonce_id
            WHERE a.membre_id = ' . $_GET['id'] . '
            AND c.membre_id != ?
            AND c.date_enregistrement > (SELECT date_enregistrement
                                        FROM commentaire
                                        WHERE reponse_id IS NULL)
     
            ');
    $reqCommentaire->execute(array((int)$_GET['id']));
    $commentaires = $reqCommentaire->fetchAll();
    suis pas sure de ma requete
    une idée?

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 134
    Points : 38 555
    Points
    38 555
    Billets dans le blog
    9
    Par défaut
    Je pense plutôt qu'il faut revoir la modélisation, mais pour en être certain, il faudrait connaitre vos règles de gestion

    A vous de les rédiger sous la forme :
    R001 : une annonce est commentée par zéro à plusieurs commentaires
    R002 : un commentaire commente une et une seule annonce
    R003 : un commentaire est concerné par zéro à plusieurs réponse
    R004 : une réponse concerne un et un seul commentaire
    R005 : etc...

  10. #10
    Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2018
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    j'ai ajouté un champ nullable "reponse_id" qui récupere l'id du commentaire auquel il repond.

    j'ai ajouté bouton "reponse" au formulaire du commentaire qui fait le job.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $reqCommentaire = $pdo->prepare('SELECT c.*, m.pseudo pseudo_annonce, a.id id_annonce, a.titre titre_annonce
          FROM commentaire c
            INNER JOIN membre m ON m.id = c.membre_id
            INNER JOIN annonce a ON a.id = c.annonce_id
            WHERE a.membre_id = ?
            AND c.membre_id != ?
            AND c.reponse_id > (SELECT id
                                FROM commentaire
                                WHERE membre_id = ? )
            ORDER BY c.id');
    j'ai pas d'erreur mais ça n'affiche rien...

    chui trop une quiche

Discussions similaires

  1. [ recherche ] Codes sources avec des commentaires en français
    Par MoRoSKiT dans le forum Langages de programmation
    Réponses: 0
    Dernier message: 01/11/2013, 19h05
  2. recherche de doublons et reperage des cellules non identiques
    Par dalo02 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 07/03/2010, 20h53
  3. Réponses: 5
    Dernier message: 19/02/2009, 17h00
  4. Réponses: 2
    Dernier message: 04/05/2007, 10h55
  5. [SQL-2005] Rechercher des caractères non numériques
    Par castaka dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 03/05/2007, 11h12

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