2015-09-09 48 views
2

我想知道是否有可能以簡單有效的方式在MySQL中執行此操作。我想在我的例子中做什麼是:選擇哪些列中的某個列的最高n個值是不同的

我有一個表,我用其他博客信息(標題,用戶等)存儲博客文本與FK。博客文本可以存儲在多行(如果它是一個非常長的文本)。如果有多行,每行都有一個序列號來了解文本的順序。

有沒有什麼簡單的方法讓我有一個查詢,從最高的FK編號(postid)(它也將是最新添加的)開始選擇行,並將響應限制設置爲10個不同的FK值。清楚的是,我不想將行數的限制設置爲10,僅限於不同的postid值的限制。

例如,如果我有以下表:

+----------+--------+-----------+ 
| sequence | postid | text | 
+----------+--------+-----------+ 
| 1  | 50 | 'Bla bla' | 
| 1  | 51 | 'Bla bla' | 
| 1  | 52 | 'Bla bla' | (1) <-- From here (52 to 61 is 10 different postids) 
| 2  | 52 | 'Bla bla' | (2) 
| 1  | 53 | 'Bla bla' | (3) 
| 2  | 53 | 'Bla bla' | (4) 
| 1  | 54 | 'Bla bla' | (5) 
| 1  | 54 | 'Bla bla' | (6) 
| 1  | 56 | 'Bla bla' | (7) 
| 1  | 57 | 'Bla bla' | (8) 
| 1  | 58 | 'Bla bla' | (9) 
| 1  | 59 | 'Bla bla' | (10) 
| 1  | 60 | 'Bla bla' | (11) 
| 1  | 61 | 'Bla bla' | (12) <-- To here 
+----------+--------+-----------+ 

在這裏,我想底部12行,因爲它們的從帖子ID 61幷包括52,其是10去括號中的數字是剛剛澄清顯示我想選擇多少行。

我希望這不是太混亂:)所以有什麼簡單而有效的方法來做到這一點?

回答

1

在下面的查詢我INNER JOIN您的主表中,其獲得的(最高)10個最高postid值的臨時表。這允許您僅保留原始表格中具有10個最高值中的一個的記錄。 的記錄不會希望被過濾掉,因爲它們不會匹配臨時表中的任何內容。

SELECT t1.sequence, t1.postid, t1.text 
FROM table t1 INNER JOIN 
(
    SELECT DISTINCT postid 
    FROM table 
    ORDER BY postid DESC 
    LIMIT 10 
) t2 
ON t1.postid = t2.postid 
+0

與'WHERE IN(postids) – Green

1
SELECT * 
FROM mytable a 
INNER JOIN (SELECT DISTINCT(postid) postid 
       FROM mytable 
       ORDER BY postid DESC LIMIT 10) b 
ON a.postid = b.postid 
相關問題