[英]How to select all categories and count number of each category articles in 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.