dongtu1789 2016-02-26 03:43
浏览 25
已采纳

内部联接的mysql查询返回重复的条目

I tried this code in phpmysql

 SELECT p.ID, p.post_title, p.post_name
 FROM `wp6p_popularpostsdata` AS pps
     INNER JOIN `wp6p_posts` AS p ON pps.`postid`= p.`ID`
 WHERE p.post_type = "post"
     AND pps.last_viewed > DATE_SUB(CURDATE(), INTERVAL 1 WEEK)
 ORDER BY pps.`pageviews` DESC 
 LIMIT 4

and it gives the results properly

1336Reading Between The Lines. reading-between-the-lines
824 Benefits of Watching Anime benefits-of-watching-anime
1427 The Day Goes By. life-goes-by
1950 Click here if you want to be rich want-to-be-rich

But when I use it in my php file, it returns

READING BETWEEN THE LINES. READING BETWEEN THE LINES. THE DAY GOES BY. BENEFITS OF WATCHING ANIME

global $wpdb;
$interval = "1 WEEK";
$now = current_time('mysql');
$top4 = $wpdb->get_results(
'SELECT p.ID, p.post_title, p.post_name
 FROM `' . $wpdb->prefix . 'popularpostssummary` AS pps
     INNER JOIN `' . $wpdb->prefix . 'posts` AS p ON pps.`postid`= p.`ID`
 WHERE p.post_type = "post"
     AND pps.last_viewed > DATE_SUB("' . $now . '", INTERVAL ' . $interval . ')
 ORDER BY pps.`pageviews` DESC 
 LIMIT 4;', ARRAY_A
);
foreach( $top4 AS $index => $row ) {
$class = ( $index == ( count( $top4 ) - 1 ) ) ? ' last' : '';
$url = get_permalink( $row['ID'] );
echo '<li class="trendingPost'.$class.'">' . 
     '<a href="' . $url . '">'.$row['post_title'].'</a></li>';
}

How can I prevent the duplicate result?

  • 写回答

1条回答 默认 最新

  • duanfu9523 2016-02-26 03:52
    关注

    It is tempting to use exists rather than a join:

    SELECT p.ID, p.post_title, p.post_name
    FROM wp6p_posts p 
    WHERE p.post_type = 'post' AND
          EXISTS (SELECT 1
                  FROM wp6p_popularpostsdata pps
                  WHERE pps.postid = p.ID AND
                        pps.last_viewed > DATE_SUB(CURDATE(), INTERVAL 1 WEEK)
                 );
    

    However, this doesn't allow you to order by pageviews. Instead, use aggregation:

    SELECT p.ID, p.post_title, p.post_name
    FROM wp6p_popularpostsdata pps INNER JOIN 
         wp6p_posts p
         ON pps.postid = p.`ID`
    WHERE p.post_type = 'post' AND
          pps.last_viewed > DATE_SUB(CURDATE(), INTERVAL 1 WEEK)
    GROUP BY p.ID, p.post_title, p.post_name
    ORDER BY MAX(pps.pageviews) DESC 
    LIMIT 4;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应