我有一个包含帖子的表格。表中有几个重要的字段,我想用于过滤,主要是
ID ,主题和凹凸。
ID,是,嗯,id。我想从最新的排序,但我正在使用时间戳(凹凸)。
线程是线程编号。如果帖子是一个帖子,那么帖子是空的。
Bump是一个时间戳,表示线程更新时或发布帖子的时间戳。
我有以下SQL查询:
SELECT * FROM `posts_boardname` WHERE `thread` IS NULL ORDER BY `bump` DESC LIMIT 10 OFFSET 0
因此需要10个线程并按更新时间戳排序。简单吧?它工作得很好,但由于我还想抓住每个帖子的3个最后回复,我还想为每个thread
发布3个帖子,所以我提出了这个:
SELECT * FROM `posts_boardname` AS thr WHERE `thread` IS NULL OR (SELECT * FROM `posts_boardname` WHERE `thread` = thr.id ORDER BY `bump` DESC LIMIT 3) ORDER BY `bump` DESC LIMIT 10 OFFSET 0
但是我收到一个错误:
Operand should contain 1 column(s)
我正在尝试在MySQL中做什么?我一直无法找到任何令人满意的答案或解决这个问题。
示例数据:
ID | Thread | Comment | Timestamp | Bump
-- | ------ | --------- | --------- | ----
1 | NULL | Thread #1 | 15 | 60
2 | NULL | Thread #2 | 20 | 20
3 | 1 | ComTT #1 | 30 | 30
4 | NULL | Thread #3 | 33 | 33
5 | 1 | ComTT #1-2| 60 | 60
6 | NULL | Thread #4 | 65 | 65
假设我想为每个线程抓取3个最新线程+最后一个响应,如果有的话,我的结果将是:
ID | Thread | Comment | Timestamp | Bump
-- | ------ | --------- | --------- | ----
6 | NULL | Thread #4 | 65 | 65
1 | NULL | Thread #1 | 15 | 60
5 | 1 | ComTT #1-2| 60 | 60
4 | NULL | Thread #3 | 33 | 33
我尝试使用UNION执行以下操作,但它似乎不起作用:
(SELECT *
FROM `posts_boardname` as thread
WHERE `threads` IS NULL
ORDER BY `bump`
DESC LIMIT 10 OFFSET 0)
UNION
(SELECT *
FROM `posts_boardname` as posts
WHERE `threads` = thread.id
ORDER BY `bump` DESC LIMIT 3)
错误:#1054 Unknown column thread.id in where clausule