php - 具有内部连接的 mysql 查询返回重复条目

标签 php mysql

我在 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

它正确地给出了结果

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

但是当我在我的 php 文件中使用它时,它返回

阅读字里行间。阅读字里行间。一天过去了。看动漫的好处

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>';
}

如何避免重复结果?

最佳答案

使用 exists 而不是 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)
             );

但是,这不允许您按pageviews 进行排序。相反,使用聚合:

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;

关于php - 具有内部连接的 mysql 查询返回重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35643025/

相关文章:

php - 未找到 SimpleXml 类

php - 使用 smarty 打印 mysql 日期

php - 我如何使用 php 从 sql 数据库中获取我的所有用户

php - 将重复项合并到一行并使用 php 求和

php - 插入多个表的帮助

php - 阿迪恩错误: [status] => 403 [errorCode] => 010 [message] => Not allowed [errorType] => security

php - 在MYSQL中存储数组?

PHP 表单无法提交

php - 按位运算符 XOR ('^' ) 如何工作?

mysql - 150 个 tinyint 或 1 个 varchar(300)?