簡體   English   中英

MySql,限制每個類別中的文章數

[英]MySql, limint number of articles in each category

我正在嘗試創建一個簡單的新聞站點,並且要在主頁上顯示所有類別,並將每個類別中的文章數限制為5。這就是我到目前為止所得到的。

表類別

id    name    
========================================
1    World
2    Sports
3    Economy
4    Music

餐桌用品

id   category_id  name  
===============================
1    1            Article 1
2    1            Article 2
3    1            Article 3
4    2            Article 11
5    2            Article 22
6    3            Article 33
7    4            Article 111
8    3            Article 222
9    3            Article 333

和我的查詢:

SELECT
  a.category_id,
  c.name as catname,
  a.name as artname
FROM
  categories AS c
  LEFT JOIN articles AS a
    ON a.category_id = c.id
LIMIT 5;

問題是該限制適用於類別表,但是我實際上需要適用於商品表。

如果您具有帶有Windows函數的較新MySQL版本,則可以使用如下查詢:您只需指定要查看的字段

SELECT c.*,a.*
FROM categories c
LEFT JOIN (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY id DESC ) AS rnr
        FROM articles ) a 
    ON c.id = a.category_id
WHERE rnr < 4
ORDER BY c.id, rnr;

樣品

MariaDB [bernd]> select * from articles;
+----+-------------+-------------+
| id | category_id | name        |
+----+-------------+-------------+
|  1 |           1 | Article 1   |
|  2 |           1 | Article 2   |
|  3 |           1 | Article 3   |
|  4 |           2 | Article 11  |
|  5 |           2 | Article 22  |
|  6 |           3 | Article 33  |
|  7 |           4 | Article 111 |
|  8 |           3 | Article 222 |
|  9 |           3 | Article 333 |
+----+-------------+-------------+
9 rows in set (0.00 sec)

MariaDB [bernd]> SELECT c.*,a.*
    -> FROM categories c
    -> LEFT JOIN (
    ->     SELECT
    ->         *,
    ->         ROW_NUMBER() OVER (PARTITION BY category_id ORDER BY id DESC ) AS rnr
    ->         FROM articles ) a
    ->     ON c.id = a.category_id
    -> WHERE rnr < 4
    -> ORDER BY c.id, rnr;
+----+---------+------+-------------+-------------+------+
| id | name    | id   | category_id | name        | rnr  |
+----+---------+------+-------------+-------------+------+
|  1 | World   |    3 |           1 | Article 3   |    1 |
|  1 | World   |    2 |           1 | Article 2   |    2 |
|  1 | World   |    1 |           1 | Article 1   |    3 |
|  2 | Sports  |    5 |           2 | Article 22  |    1 |
|  2 | Sports  |    4 |           2 | Article 11  |    2 |
|  3 | Economy |    9 |           3 | Article 333 |    1 |
|  3 | Economy |    8 |           3 | Article 222 |    2 |
|  3 | Economy |    6 |           3 | Article 33  |    3 |
|  4 | Music   |    7 |           4 | Article 111 |    1 |
+----+---------+------+-------------+-------------+------+
9 rows in set (0.00 sec)

MariaDB [bernd]>

暫無
暫無

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

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