|
Publicité | |||||||||||||||||||||||
|
|
#1 (permalink) |
|
Candidat au titre de Membre du Club
![]() Date d'inscription: juillet 2009
Messages: 26
|
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 :
<?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; ?> - 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 |
|
|
|
|
|
#3 (permalink) | |
|
Candidat au titre de Membre du Club
![]() Date d'inscription: juillet 2009
Messages: 26
|
Citation:
|
|
|
|
|
|
|
#4 (permalink) |
![]() Date d'inscription: juillet 2005
Messages: 9 911
|
Sans le confirmer :
Code sql :
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 |
|
|
|
|
|
#5 (permalink) |
|
Candidat au titre de Membre du Club
![]() Date d'inscription: juillet 2009
Messages: 26
|
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 |
|
|
|
|
|
#9 (permalink) | |
|
Candidat au titre de Membre du Club
![]() Date d'inscription: juillet 2009
Messages: 26
|
Citation:
|
|
|
|
|
|
|
#10 (permalink) |
![]() |
Essaie plutôt cette requête :
Code SQL :
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. Futur ingénieur CNAM, ingénieur d'étude à l'École Nationale de Formation Agronomique. « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) |
|
|
|
|
|
#11 (permalink) | |
|
Candidat au titre de Membre du Club
![]() Date d'inscription: juillet 2009
Messages: 26
|
Citation:
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é |
|
|
|
|
|
|
#12 (permalink) |
![]() |
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. Futur ingénieur CNAM, ingénieur d'étude à l'École Nationale de Formation Agronomique. « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) |
|
|
|
|
|
#13 (permalink) | |
|
Candidat au titre de Membre du Club
![]() Date d'inscription: juillet 2009
Messages: 26
|
Citation:
Oui j'ai compris ta requête, mais même en attribuant la valeur 10 a la variable ca ne marche pas Code :
<?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");?>
Merci une fois de plus de ta réponse rapide |
|
|
|
|
|
|
#14 (permalink) |
![]() |
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. Futur ingénieur CNAM, ingénieur d'étude à l'École Nationale de Formation Agronomique. « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) |
|
|
|
|
|
#15 (permalink) |
|
Candidat au titre de Membre du Club
![]() Date d'inscription: juillet 2009
Messages: 26
|
Ok donc je viens de test la requete directement sous phpmyadmin.
Seulement, je rencontre quelques problèmes (pour changer !)Voici mon code : Code :
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 Comment faire alors ? Voici le message d'erreur que me donne phpmyadmin : Code :
MySQL a répondu:Documentation #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '->comments AS c1 INNER JOIN ( SELECT p.post_title, MAX(c.comment_date_gmt) A' at line 2 |
|
|
|
|
|
![]() |
||
Simple (?) Requête SQL
|
||
| Outils de la discussion | |
|
|