数据库-left join与多个order by排序实例

有这个么需求,一些练习会有人评论,在列出练习时要将有评论的练习排在前面,这时候可以使用left join与多个order by的办法来达到要求。

首先,有practice_id为3539、3715、3514三个练习是有人评论的,3514评论时间为最新:

SELECT
	* 
FROM
	comments 
WHERE
	practice_id IN ( 3514, 3715, 3527, 3539 )

使用left join

SELECT
	`practices`.* 
FROM
	`practices`
	left JOIN `comments` ON `comments`.`practice_id` = `practices`.`id` 
WHERE
	`practices`.`user_id` = 7 
	AND `practices`.`pth_sentence_id` = 755 
	AND `practices`.`del` = FALSE 

解读下:

  • WHERE条件:
    找到user_id为7的用户,而且其练习的句子id为755,并且del为false(使用了软删除的办法,只标记,并不真的删除)

  • FROM中,practices是练习表,使用左连接,这样可以显示满足条件的所有练习记录(不管有没有评论)。

left join与inner join的区别


如果你使用inner join,只能得到完全满足inner join中条件的记录,共三条,与第一张图对应上了

详细区别请搜索

https://cn.bing.com/search?q=left+join+inner+join+%E5%8C%BA%E5%88%AB

多个order by

因为有评论的要在前,所以comment.created_at要写在前面,表示这个是主排序,

ORDER BY
	comments.created_at DESC,
	practices.created_at desc

如果practices.created_at在前面,

ORDER BY
	practices.created_at desc,
	comments.created_at DESC
	

结果会是这样:

我是@爱玩的安哥,关注我获取更多有用知识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱玩的安哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值