mysql - SQL查询优化,如果第一个为空则按其他行排序

标签 mysql sql select left-join

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

问题:

  1. 我需要双重左连接才能从主题和帖子的 UUID 中获取用户昵称
  2. 并非所有主题都会有帖子,如您所见,我根据帖子 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/

相关文章:

jquery - 为什么克隆 DIV 中的 SELECT 在刷新时会出现错误行为?

mysql - Mysql(innodb)行级锁定是解决方案吗?

java - MySql Java : Weird issue that I can not solve

java - 在 DynamicReports 上创建图表以按年份比较销售额

sql - 使用 PostgreSQL 中的查询结果更新列

mysql - 在 MySQL 中计算每天的平均销售额

javascript - 将字符串中的日期转换为日期对象以插入数据库

MySQL - NOT IN WHERE 子句中的查询具有相同的结构,适用于第一个表但不适用于第二个表

mysql - MySQL 中 int 括号中的属性的用途是什么?

sql - PostgreSQL:从时间戳截断小时/分钟/秒