Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何通过从其他表中选择总和来选择三个最高输出?_Php_Mysql - Fatal编程技术网

Php 如何通过从其他表中选择总和来选择三个最高输出?

Php 如何通过从其他表中选择总和来选择三个最高输出?,php,mysql,Php,Mysql,在我当前的PHP项目中,我想在我的网站上显示三个浏览量最大的帖子 每个帖子的视图数存储在不同的表中,就像帖子的常规数据一样。在该表中,记录了每天和每篇文章的每日视图 目前我可以从general post表中获取所有数据 $query = "SELECT * FROM `articles` WHERE `article_category_id` = '1' DESC LIMIT 3"; $most_viewed_post_query = mysqli_query($connection, $que

在我当前的PHP项目中,我想在我的网站上显示三个浏览量最大的帖子

每个帖子的视图数存储在不同的表中,就像帖子的常规数据一样。在该表中,记录了每天和每篇文章的每日视图

目前我可以从general post表中获取所有数据

$query = "SELECT * FROM `articles` WHERE `article_category_id` = '1' DESC LIMIT 3";
$most_viewed_post_query = mysqli_query($connection, $query);

    while($row = mysqli_fetch_assoc($most_viewed_post_query)) {

        $article_id = $row['article_id'];
        $article_categorie = $row['article_category_id'];
        $article_title = $row['article_title']; 
        $article_author = $row['article_author'];
        $article_date = $row['article_date'];
从views表中,我只能通过ID得到一篇文章的总数

$query = "SELECT SUM(day_views_count) AS article_views FROM days_views WHERE view_id = $article_id";
$get_article_views = mysqli_query($connection, $query);

    $row = mysqli_fetch_array($get_article_views);
    $article_views = $row['article_views'];

我不知道如何将这两个选择写在一起,以使输出适合。

您可以使用聚合查询将表
文章
连接起来,从
文章视图
中提取三个查看次数最多的
视图id
中的,如:

select a.*
from articles a
inner join (
    select view_id 
    from article_views 
    group by view_id
    order by sum(day_views_count) desc
    limit 3
) v on v.view_id = a.azrticle_id
那么:

select a.*
from articles a
inner join (
    select view_id 
    from article_views 
    group by view_id
    order by day_views_count desc
    limit 3
) v on v.view_id = a.article_id
另一个建议是使用sum(day\u views\u count)对每个条目的整个列进行求和,因此无法正确排序。
我的建议是按计数排序,然后取前三名。它能用吗?

你可以用这样的东西:

SELECT SUM(day_views_count) AS article_views 
FROM days_views 
WHERE view_id = $article_id
ORDER BY article_views LIMIT 3

这对我不起作用。在我的结果中,我只得到了datatable的前三个条目,但不是浏览次数最多的条目。幸运的是,我在这里得到了相同的结果
select a.*
from articles a
inner join (
    select view_id 
    from article_views 
    group by view_id
    order by day_views_count desc
    limit 3
) v on v.view_id = a.article_id
SELECT SUM(day_views_count) AS article_views 
FROM days_views 
WHERE view_id = $article_id
ORDER BY article_views LIMIT 3