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 :

Simple (?) Requête SQL


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut Simple (?) Requête SQL
    Voilà alors avant tout j'avou être débutant en SQL - PHP et Wordpress ^_^ alors pitié, soyez tolérant

    Bon, mon problème est celui ci :

    J'ai débuté la réalisation d'un blog sous wordpress, et j'aimerais pouvoir afficher dans ma sidebar, les 10 derniers articles commentés de mon blog.

    J'ai trouvé du code sur internet qui m'a permis d'obtenir à peu près le résultat que j'attendais :

    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
    <?php
    global $wpdb;
    $number = 10;
    $comments = $wpdb->get_results("SELECT Distinct post_title, comment_post_ID, comment_author, comment_author_url, comment_ID
    FROM $wpdb->comments C, $wpdb->posts P 
    WHERE C.comment_approved = '1' AND C.comment_post_id = P.ID
    ORDER BY C.comment_date_gmt DESC LIMIT $number");?>
     
    <h2 align="left">Les 10 derniers articles commentés</h2><br />
     
    <ul id="recentcomments">
     
     
     
     
    <?php
    if ( $comments ) : foreach ($comments as $comment) :
    echo '<li class="recentcomments">' . sprintf(__('%2$s commenté par %1$s'), get_comment_author_link(), '<a href="'. get_permalink($comment->comment_post_ID) . '#comment-' . $comment->comment_ID . '">' . get_the_title($comment->comment_post_ID) . '</a>') . '</li>'."\n";
    endforeach; endif;
    ?>
    Et voici le résultat obtenu :

    - Article 1 commenté par ToTo
    - Article 1 commenté par TaTa
    - Article 2 commenté par TonTon
    - Article 3 commenté par TiTi
    - Article 3 commenté par TuTu

    (dsl pour le manque d'inspiration hein )

    Vous l'aurez compris, je ne veux pas que des mêmes articles de mon blog apparaissent plusieurs fois ici. L'idéal serait :

    -Article 1 commenté par ToTo
    -Article 2 commenté par TonTon
    -Article 3 commenté par TiTi

    Alors je me suis renseigné sur le comment du pourquoi, j'ai modifié la requête en essayant de faire un ' distinct ' ainsi que des jointures, mais mon trop faible niveau de compétence dans la matière m'handicape.

    En espérant qu'une âme charitable (et douée en sql-php) m'éclaire sur le sujet, je vous remercie d'avance d'avoir pris le temps de lire ce post,

    Amicalement,

    Omnislash

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pourquoi afficher le commentaire de Toto plutot que celui de Tata pour l'article 1 ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Pourquoi afficher le commentaire de Toto plutot que celui de Tata pour l'article 1 ?
    Bah si tu regardes le code, c'est classé par ordre NON chronologique, donc je veux juste avoir le dernier post paru pour chaque articles ^^ Et comme toto a post son comment après TaTa ..

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Sans le confirmer :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT post_title, comment_post_ID, comment_author, comment_author_url, comment_ID
    FROM  $wpdb->posts P 
    JOIN $wpdb->comments 
    ON C.comment_post_ID = P.ID
    WHERE C.comment_approved = 1
    GROUP BY P.ID
    ORDER BY C.comment_date_gmt
    DESC LIMIT $number
    (si tu n'as pas de bol, tu auras le premier commentaire )
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut
    Citation Envoyé par sabotage Voir le message
    (si tu n'as pas de bol, tu auras le premier commentaire )
    Ahhh ! Merci de ta réponse, je n'ai déjà plus les articles qui se répètent


    Cependant j'ai pas de bol comme tu as dis, je me retrouve avec le 1er commentaire xD

    tu sais d'où ca peut venir ? ...

    Merci encore de tes réponses qui m'aide beaucoup

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Dans l'autre sens ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY C.comment_date_gmt DESC
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Essaie plutôt cette requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT t.post_title, c1.comment_post_ID, c1.comment_author, c1.comment_author_url, c1.comment_ID
    FROM $wpdb->comments AS c1
    INNER JOIN (
      SELECT p.post_title, MAX(c.comment_date_gmt) AS Date_dernier_commentaire
      FROM $wpdb->posts AS p
      INNER JOIN $wpdb->comments AS c ON c.comment_post_id = p.ID
      WHERE c.comment_approved = 1
    ) AS t ON c1.comment_date_gmt = t.Date_dernier_commentaire
    ORDER BY c1.comment_date_gmt DESC
    LIMIT $number
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Essaie plutôt cette requête :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT t.post_title, c1.comment_post_ID, c1.comment_author, c1.comment_author_url, c1.comment_ID
    FROM $wpdb->comments AS c1
    INNER JOIN (
      SELECT p.post_title, MAX(c.comment_date_gmt) AS Date_dernier_commentaire
      FROM $wpdb->posts AS p
      INNER JOIN $wpdb->comments AS c ON c.comment_post_id = p.ID
      WHERE c.comment_approved = 1
    ) AS t ON c1.comment_date_gmt = t.Date_dernier_commentaire
    ORDER BY c1.comment_date_gmt DESC
    LIMIT $number

    o_O Du premier coup Monsieur ! Le dernier article commenté à bien été affiché en montrant le dernier post ! Seul soucis maintenant, je ne vois que le dernier article commenté et pas mes 10 derniers >.< Bizarre non ? surtout quand je vois que tu as conservé la variable $number , peut-être une faute de syntaxe ? Ou peut-être est-ce à cause de MAX(c.comment_date_gmt) ?


    En tout cas merci de ta réponse

    C'est chiant les noobs désolé

  9. #9
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Que vaut la variable $number ?

    La sous-requête (alias 't'), donne la date du commentaire le plus récent pour chaque post.
    On fait ensuite une jointure de ce résultat avec la table des commentaires pour avoir les informations des commentaires.

    Si tu veux les 10 derniers commentaires, il faut que $number ait pour valeur 10.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 26
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Que vaut la variable $number ?

    La sous-requête (alias 't'), donne la date du commentaire le plus récent pour chaque post.
    On fait ensuite une jointure de ce résultat avec la table des commentaires pour avoir les informations des commentaires.

    Si tu veux les 10 derniers commentaires, il faut que $number ait pour valeur 10.

    Oui j'ai compris ta requête, mais même en attribuant la valeur 10 a la variable ca ne marche pas Bien qu'étant débutant, je pense que la variable prend bien la valeur 10 dans ce code la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    global $wpdb;
    $number = 10;
    $comments = $wpdb->get_results("SELECT t.post_title, c1.comment_post_ID, c1.comment_author, c1.comment_author_url, c1.comment_ID
    FROM $wpdb->comments AS c1
    INNER JOIN (
      SELECT p.post_title, MAX(c.comment_date_gmt) AS Date_dernier_commentaire
      FROM $wpdb->posts AS p
      INNER JOIN $wpdb->comments AS c ON c.comment_post_id = p.ID
      WHERE c.comment_approved = 1
    ) AS t ON c1.comment_date_gmt = t.Date_dernier_commentaire
    ORDER BY c1.comment_date_gmt DESC
    LIMIT $number");?>
    Ou alors j'ai vraiment rien compris du tout

    Merci une fois de plus de ta réponse rapide

  11. #11
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    En principe la variable $number a bien la valeur 10 oui !

    Il faudrait essayer d'afficher la requête exacte envoyée au serveur et la lancer dans phpMyAdmin pour voir ce que ça donne.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. je bloque sur de simples requêtes SQL
    Par ikuzar dans le forum Débuter
    Réponses: 6
    Dernier message: 17/09/2012, 19h17
  2. Question simple requête SQL
    Par parapluie dans le forum Langage SQL
    Réponses: 1
    Dernier message: 23/07/2010, 11h53
  3. Simple requête SQL.
    Par About dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/04/2008, 04h12
  4. Simple requête sql
    Par innova dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/11/2006, 12h33
  5. requête SQL simple
    Par Echizen1 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 20/09/2006, 14h34

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