一个逻辑问题。面试没有通过。然后回来后还是想不明白。希望大神们来帮我解决

yikeji 发布于 2016/08/06 20:04
阅读 416
收藏 2

表一、学生表

+------+---------+
| id   | name|
+------+---------+
| 1633  |    小明| 
| 1994  |    小李| 
| 1381  |    小华| 
| 2081  |    小清| 
+------+---------+

表二、中间表,字段名:id,uid,son_id,add_time

+------+---------+------------+------------+
| id   | uid | son_id | add_time   |
+------+---------+------------+------------+
| 1 |    1633 |       1994 | 1465700954 |
| 2 |    1994 |       1633 | 1465700954 |
| 3 |    1381 |       2081 | 1465700954 |
| 4 |    2081 |       1381 | 1465700954 |
+------+---------+------------+------------+

表四,课程记录表:id,uid,c_id,add_time

+------+---------+------------+------------+
| id   | uid |         c_id add_time   |
+------+---------+------------+------------+
| 1 |    1633 |       10| 1465700954 |
| 2 |    0|       12| 1465700954 |
| 3 |    1994|       13| 1465700954 |
| 4 |    2081 |       14| 1465700954 |
+------+---------+------------+------------+

在聊下需求:

按照课程记录表,查出所有符合条件的记录
2、条件一:中间表的时间大于课程记录表的时间
3、条件二:中间表,有关联的课程表 记录:(意思是 上面的数量,课程表里的1994,是通过中间表来确定关系的,所以应该也显示出来)
4、条件三:课程表uid为0的系统数据
5、条件四:显示出user姓名
6、条件五:带分页

我想了几天了,还是能力太弱,无法解决。觉得整个逻辑是无法实现的。


加载中
0
sunshine2012
sunshine2012

((select a.uid, a.c_id, a.add_time, c.name from 课程记录表 a left join 中间表 b on a.uid=b.uid left join 学生表 c on a.uid=c.id where a.add_time<b.add_time) union (select id , uid, c_id, add_time from 课程记录表 where uid=0)) limit page, page_size;

返回顶部
顶部