【问题标题】:JOIN ids with 0 as a parent ids, to a query of ids that have distinct parent ids将 0 的 id 作为父 id 加入到具有不同父 id 的 id 的查询中
【发布时间】:2018-04-06 06:42:31
【问题描述】:

我正在尝试列出与用户相关的讨论。

想象一下,如果你愿意的话:

posts
-------------------------------------------------------------------
ID | PID | FID | TITLE                                    | USER
1  |  0  |  1  | Hello World                              | User 1
2  |  0  |  23 | Endangered Squirrels & How to Cook Them  | Eddy
3  |  1  |  1  | Re: Hello World                          | Eddy
4  |  1  |  1  | Re: Hello World                          | Clark
5  |  0  |  3  | Any Vacation Suggestions?                | Clark
6  |  5  |  3  | Re: Any Vacation Suggestions?            | Eddy
7  |  5  |  3  | Re: Any Vacation Suggestions?            | Clark
8  |  5  |  3  | Re: Any Vacation Suggestions?            | Ellen

为了显示 Eddy 的所有帖子,我使用了一个查询来选择具有 DISTINCT parents ids(pid) 的帖子,并认为它有效。我很快意识到 0 只考虑一次 DISTINCT,如果他创建了一个新主题但没有回复,如果不是他的第一个,它就不会被列出。

那么我如何获得具有 DISTINCT pid 和 pid != 0 的 id 列表,并将其与具有 pid = 0 的 id 的查询连接起来,其中用户 = Eddy

这是我问的第一个问题,如果不完美请见谅。

已通过查询更新

我已经切换到使用 GROUP BY,所以我可以获取帖子的 ID,但问题仍然存在

我被要求提供我的查询。这是我正在使用的,它只提供 1 行,pid 为 0。我还更新了上面的表格布局以显示论坛 id,在下面的查询中,它只从公共论坛列表中提取主题。

SELECT id, pid FROM posts WHERE fid IN (1,2,3) AND author = 'Eddy' GROUP BY pid ORDER BY IF(latest > timestamp, latest, timestamp) DESC LIMIT 1, 5;

感谢您的任何帮助。

【问题讨论】:

标签: mysql join distinct


【解决方案1】:

我能够在 GROUP BY 中使用一个简单的 IF 来做我想做的事,就是这么简单。

SELECT id, pid
FROM posts
WHERE fid IN (1,2,3)
AND author = 'Eddy'
GROUP BY IF(pid > 0, pid, id)
ORDER BY IF(latest > timestamp, latest, timestamp) DESC
LIMIT 1, 5;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    相关资源
    最近更新 更多