基于父结果获取结果的SQL查询

时间:2017-07-13 11:52:25

标签: mysql sql

我有一个包含帖子的表格。表中有几个重要的字段,我想用于过滤,主要是

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

0 个答案:

没有答案