mysql - JOIN ids 以 0 作为父 id,查询具有不同父 id 的 id

标签 mysql join distinct

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

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

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 的所有帖子,我使用了一个查询来选择带有不同 parent ID(pid) 的帖子,并且认为它有效。我很快意识到 0 只被认为是 DISTINCT 一次,如果他创建了一个新主题并且没有回复,那么如果这不是他的第一个主题,则不会列出该主题。

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

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

已更新查询

我已经改用 GROUP BY,这样我就可以获取帖子的 ID,但问题仍然相同

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

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;

感谢您提供的所有帮助。

最佳答案

我可以用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;

关于mysql - JOIN ids 以 0 作为父 id,查询具有不同父 id 的 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49686904/

相关文章:

MySQL从多个表连接

mysql - 使用联接时如何返回不同的行?

mysql - 删除子查询

PHP下拉列表导致无限循环

php - MySQL group_concat 并与另一个 group_concat 嵌套

mysql - 如何将数据库的一列拆分为多列并将日期时间数据类型的值与字符串数据类型的值进行比较

sql - 不是独立地连接多个表,而是使用单独的查询?

Mysql从一系列中选择不同的值

sql - 甲骨文 : 'Count over Partition by' output on first row of the keyword alone

mysql - 选择第一个加入的值,而不是全部