2016-12-03 94 views
3

我有一个表有很多数据,它有一个类别ID和postId,我需要阅读每个类别CatID相同的3个新帖子。如何在MySQL中为每个类别选择3行?

这不是其他人提出的问题的重复。请检查在我的问题中,postid catid可以是任何重复的问题,在运行查询之前计算它。

我所写的是

SELECT 
    MAX(` postid `) AS p1, 
    ` catid ` AS c1 
FROM 
    ` postcategory ` 
GROUP BY 
    ` catid 

我可以把其他2查询在它的工会不同,但它会使查询了很多大。有什么好的方法可以在MySQL中做到这一点。我正在寻找的阅读3 postId(最大)属于同一类别。

postId catId 
------ -------- 
    9   3 
    15   3 
    16   3 
    17   3 
    18   3 
    19   5 
    20   8 
    21   6 
    22   8 
    23   6 
    46   6 
    46   8 
    26   3 
    25   3 
    27   5 
    28   3 
    37   6 
    39  10 
    40   6 
    41   6 
    42   6 
    43   6 
    44   5 
    45  11 
    63   6 
    64   5 
    65   6 
    66   6 
    68   6 
+0

搜索*选择每个组n * – Rahul

+0

的[mysql的选择每组的前n行可能的复制](http://stackoverflow.com/questions/19168834/mysql-select-the-first-n-rows-per-group) – Dekel

+0

Google“mysql top N rows group” –

回答

3

您可以从每个类别阅读3个新帖子使用下面的查询。

SELECT 
    p1.postId, 
    p1.catId 
FROM 
    postcategory p1 
JOIN postcategory p2 ON p1.catId = p2.catId 
AND p2.postId >= p1.postId 
GROUP BY 
    p1.postId, 
    p1.catId 
HAVING 
    COUNT(*) <= 3 
ORDER BY 
    catId, 
    postId 

在这里你可以看到Live Demo

输出:

enter image description here

+1

谢谢@Faisal,它的工作,这就是我想要做的:) – Adrian

+0

@gupta最受欢迎 – Faisal

+0

Hello @Faisal,我删除了postcategory表,现在所有的类都直接存储在post表中。请检查这个http://pastebin.com/wy47Midj – Adrian

相关问题