SQL 查询:
SELECT
T.*,
U.nick AS author_nick,
P.id AS post_id,
P.name AS post_name,
P.author AS post_author_id,
U2.nick AS post_author
FROM
zero_topics T
LEFT JOIN
zero_posts P
ON
T.id = P.topic_id
LEFT JOIN
zero_players U
ON
T.author = U.uuid
LEFT JOIN
zero_players U2
ON
P.author = U2.uuid
ORDER BY
P.id DESC
问题:
- 我需要双重左连接才能从主题和帖子的 UUID 中获取用户昵称
- 并非所有主题都会有帖子,如您所见,我根据帖子 ID 排序(它将是日期),但它显示在最后一个帖子的第一名主题上,以及没有回复的底部主题上,当帖子没有时,我如何定义顺序不存在?
最佳答案
1.如果需要在不同列中显示昵称,则需要双左连接
2.您可以在order by
中使用case
ORDER BY
CASE
WHEN P.id is null THEN T.ID
ELSE P.ID
END ASC
最终查询:-
SELECT
T.*,
U.nick AS author_nick,
P.id AS post_id,
P.name AS post_name,
P.author AS post_author_id,
U2.nick AS post_author
FROM
zero_topics T
LEFT JOIN
zero_posts P
ON
T.id = P.topic_id
LEFT JOIN
zero_players U
ON
T.author = U.uuid
LEFT JOIN
zero_players U2
ON
P.author = U2.uuid
ORDER BY
CASE
WHEN P.id is null THEN T.ID
ELSE P.ID
END ASC
关于mysql - SQL查询优化,如果第一个为空则按其他行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28281448/