sql >> Database >  >> RDS >> Mysql

Hoe krijg ik de meest recente becommentarieerde post boven de nieuwe ingediende post in Wordpress?

Probeer het eens werkt perfect voor mij wat het doet vraag alle berichten op met een left jon met comments tabel, dus als een bericht commentaar them=n heeft, heeft het ook de comment_date als er geen reacties op het bericht zijn geplaatst, is het in de resultatenset null dus ik heb de comment_date . samengevoegd met post_date dus welk bericht de hoogste datum heeft (voor comment_date of post_date) zal het eerst zijn enzovoort

SELECT p.*,
(CASE WHEN c.comment_date IS NULL THEN p.`post_date` ELSE c.comment_date END) order_column
 FROM `wp_posts` p
LEFT  JOIN `wp_comments` c  ON (p.ID = c.`comment_post_ID` ) WHERE p.post_type='post' AND p.post_status='publish'
GROUP BY p.ID
 ORDER BY order_column   DESC

Voor het weergeven van de berichten moet u eerst de resultaten krijgen door de globale variabele van de WP te definiëren voor de database-interactie, d.w.z. $wpdb

<?php
global $wpdb;
$results = $wpdb->get_results("    SELECT p.*,
    (CASE WHEN c.comment_date IS NULL THEN p.`post_date` ELSE c.comment_date END) order_column
     FROM `wp_posts` p
    LEFT  JOIN `wp_comments` c  ON (p.ID = c.`comment_post_ID` ) WHERE p.post_type='post' AND p.post_status='publish'
    GROUP BY p.ID
     ORDER BY order_column   DESC"); 
?>

HTML

<?php foreach($results as $result){

<h1><?php echo $result->post_title;?></h1>
<div> <?php echo $result->post_content;?> </div>
// and so on the fields of wp_posts
<?php } // loop end ?>

Ik hoop dat dat is wat je zocht




  1. Hoe schakel ik php in om met postgresql te werken?

  2. UUID opslaan als string in mysql met behulp van JPA

  3. Oracle-datum tussen zoekopdracht

  4. Waarschuwing:mysqli_connect():onbekende MySQL-serverhost