我想知道是否可以通过简单有效的方式在MySQL中执行此操作。我想在我的例子中做的是:
我有一张桌子,我将博客文本与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行,因为它们的postid从61变为52,包括52,即10。括号中的数字只是为了说明我想要选择多少行。
我希望这并不是太令人困惑:)所以有没有简单有效的方法来做到这一点?
答案 0 :(得分: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
答案 1 :(得分:1)
在以下查询中INNER JOIN
将您的主表添加到临时表中,该表获取(最多)10个最高postid
值。这允许您仅保留原始表中具有10个最高postid
值之一的记录。您不想要的记录将被过滤掉,因为它们与临时表中的任何内容都不匹配。
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