两张表
表A是一个公有课程表有id, pro_name
两个字段,大概有5们课程,每一名都要上
表B是用户和课程的提醒的关联表,有id ,pro_id ,user_id ,tip_time
四个字段,分别表示ID ,课程ID ,用户ID和提醒上课时间,提醒上课时间不可以为空,而且不是所有的课程都要添加提醒
比如:一共有5门课要上,只要3门课添加了提醒,所以表B 只有三条记录
A表数据
DROP TABLE IF EXISTS `A`;
CREATE TABLE `A` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pro_name` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4;
INSERT INTO `A` VALUES ('1', 'p1');
INSERT INTO `A` VALUES ('2', 'p2');
INSERT INTO `A` VALUES ('3', 'p3');
INSERT INTO `A` VALUES ('4', 'p4');
B表数据
DROP TABLE IF EXISTS `B`;
CREATE TABLE `B` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`pro_id` int(11) DEFAULT NULL,
`user_id` int(11) DEFAULT NULL,
`tip_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;
INSERT INTO `B` VALUES ('1', '3', '1', '2019-04-15 15:24:27');
INSERT INTO `B` VALUES ('2', '4', '1', '2019-04-16 15:24:39');
INSERT INTO `B` VALUES ('3', '5', '1', '2019-04-17 15:24:48');
需求是:按照提醒课程时间给课程表排序
首先想到外连接
select
A.* ,B.*
from A LEFT
JOIN B on A.id =B.pro_id AND B.user_id =1
order by B.tip_time DESC ,A.id DESC
记得一定要添加B.user_id =1因为提醒表在实际中不是一个人在用
查询结果
mysql> select
A.* ,B.*
from A LEFT JOIN B on A.id =B.pro_id AND B.user_id =1
order by B.tip_time DESC ,A.id DESC;
+----+----------+------+--------+---------+---------------------+
| id | pro_name | id | pro_id | user_id | tip_time |
+----+----------+------+--------+---------+---------------------+
| 5 | p5 | 3 | 5 | 1 | 2019-04-17 15:24:48 |
| 4 | p4 | 2 | 4 | 1 | 2019-04-16 15:24:39 |
| 3 | p3 | 1 | 3 | 1 | 2019-04-15 15:24:27 |
| 2 | p2 | NULL | NULL | NULL | NULL |
| 1 | p1 | NULL | NULL | NULL | NULL |
+----+----------+------+--------+---------+---------------------+