我不是 MySQL 专家,但我一直设法拼凑出一些有用的东西。不幸的是,我最近的尝试导致服务器死机,所以显然我正在做一些非常低效的事情。任何人都可以提示我问题出在哪里以及如何在不每次都关闭整个站点的情况下获得相同的结果吗?
$sqlbest = "SELECT
wp_postmeta.meta_value
, wp_posts.post_title
, wp_posts.ID
, (TO_DAYS(CURDATE())- TO_DAYS(wp_posts.post_date))+1 AS days
FROM `wp_postmeta` , `wp_posts`
WHERE `wp_postmeta`.`post_id` = `wp_posts`.`ID`
AND `wp_posts`.`post_date` >= DATE_SUB( CURDATE( ) , INTERVAL 1 WEEK)
AND `wp_postmeta`.`meta_key` = 'views'
AND `wp_posts`.`post_status` = 'publish'
AND wp_posts.ID != '".$currentPostID."'
GROUP BY `wp_postmeta`.`post_id`
ORDER BY (CAST( `wp_postmeta`.`meta_value` AS UNSIGNED ) / days) DESC
LIMIT 0 , 4";
$results = $wpdb->get_results($sqlbest);
它使用帖子浏览量来计算最后发布的帖子的浏览量/天,然后按该数量对它们进行排序,并获取前 4 名。
我想我发现它的效率很低,因为它必须每次都计算几千个帖子的浏览量/天,但我不知道如何做得更好。
提前致谢。
最佳答案
您可以消除每次都调用这些日期函数的需要,方法是将它们静态传递到 PHP 服务器(可能未与您的数据库同步)的查询中,或者您可以编写一个存储过程并保存结果那些将在查询中使用的变量的日期函数。
关于mysql - 低效的 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5883665/