簡體   English   中英

如何通過 select 從其他表中求和 select 三個最高輸出?

[英]How to select the three highest outputs by select sum from other table?

在我當前的 PHP 項目中,我想在我的網站上顯示三個瀏覽次數最多的帖子。

每個帖子的查看次數存儲在不同的表中,就像帖子的一般數據一樣。 在此表中,每天和每個帖子都會輸入每日視圖。

目前我可以從一般的帖子表中獲取所有數據,

$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'];
CREATE TABLE `articles` (
  `article_id` int(3) NOT NULL,
  `article_category_id` int(3) NOT NULL,
  `article_title` varchar(255) COLLATE utf8mb4_german2_ci NOT NULL,
  `article_author` varchar(255) COLLATE utf8mb4_german2_ci NOT NULL,
  `article_date` date NOT NULL,
  `article_content` text COLLATE utf8mb4_german2_ci NOT NULL,
  `article_tag` varchar(255) COLLATE utf8mb4_german2_ci NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_german2_ci;

從視圖表中,我只能按 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'];
CREATE TABLE `days_views` (
  `view_id` int(11) NOT NULL,
  `day` date NOT NULL,
  `day_views_count` int(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_german2_ci;

我不知道如何將兩個 SELECTS 一起編寫以使 output 適合。

你可以使用這樣的東西:

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

您可以使用 agregatd 查詢連接表articles ,該查詢從article_views中提取三個查看次數最多的view_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_views_count) 的另一個建議將對每個條目的整個列求和,因此它不會正確排序。 我的建議是按計數排序,然后獲得前三名。 它有效嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM