Guest User

Untitled

a guest
Jul 9th, 2018
495
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.55 KB | None | 0 0
  1. id | id_course | lesson_title
  2. 1 | 3 | Урок 1
  3. 2 | 3 | Урок 2
  4. 3 | 3 | Урок 3
  5. 4 | 4 | Урок 4
  6. 5 | 4 | Урок 5
  7.  
  8. id | id_lesson | email | date
  9. 43 | 1 | 123@gmail.com | 2018-07-09 13:17:05
  10. 44 | 2 | 123@gmail.com | 2018-07-09 13:18:05
  11. 45 | 3 | 123@gmail.com | 2018-07-09 13:19:05
  12.  
  13. function total_score($id){
  14. global $connection;
  15. $query = "SELECT l.id_course, h.email, MAX(h.date) FROM lesson l LEFT JOIN history h ON h.id_lesson = l.id WHERE l.id_course= '$id' GROUP BY l.id_course, h.email HAVING SUM(h.id_lesson IS NULL) = 0";
  16. $res = mysqli_query($connection, $query);
  17. $total_score = array();
  18. while($row = mysqli_fetch_assoc($res)){
  19. $total_score[$row['email']] = $row;
  20. }
  21. return $total_score;
  22. }
  23.  
  24. SELECT l.id_course, h.email, MAX(h.date)
  25. FROM lesson l
  26. LEFT JOIN history h ON h.id_lesson = l.id
  27. GROUP BY l.id_course, h.email
  28. HAVING SUM(h.id_lesson IS NULL) = 0
  29.  
  30. create table `lesson`
  31. (
  32. `id` int,
  33. `id_course` int,
  34. `lesson_title` text
  35. );
  36.  
  37. create table history
  38. (
  39. `id` int,
  40. `id_lesson` int,
  41. `email` text,
  42. `date` date
  43. );
  44.  
  45. create table history
  46. (
  47. `id` int,
  48. `id_lesson` int,
  49. `email` text,
  50. `date` date
  51. );
  52.  
  53. Insert into `lesson` (`id`,`id_course`,`lesson_title`) values
  54. (1, 3, 'Урок 1'),
  55. (2, 3, 'Урок 2'),
  56. (3, 3, 'Урок 3'),
  57. (4, 4, 'Урок 4'),
  58. (5, 4, 'Урок 5')
  59. ;
  60.  
  61. Insert into `lesson` (`id`,`id_course`,`lesson_title`) values
  62. (1, 3, 'Урок 1'),
  63. (2, 3, 'Урок 2'),
  64. (3, 3, 'Урок 3'),
  65. (4, 4, 'Урок 4'),
  66. (5, 4, 'Урок 5')
  67. ;
  68.  
  69. Insert into `history` (`id`,`id_lesson`,`email`,`date`) values
  70. (43, 1, '100@gmail.com', now()),
  71. (44, 2, '100@gmail.com', now()),
  72. (45, 3, '100@gmail.com', now()),
  73. (46, 4, '110@gmail.com', now()),
  74. (47, 5, '110@gmail.com', now()),
  75. (48, 1, '200@gmail.com', now()),
  76. (49, 2, '200@gmail.com', now()),
  77. (50, 1, '300@gmail.com', now()),
  78. (51, 4, '300@gmail.com', now())
  79. ;
  80.  
  81. Insert into `history` (`id`,`id_lesson`,`email`,`date`) values
  82. (43, 1, '100@gmail.com', now()),
  83. (44, 2, '100@gmail.com', now()),
  84. (45, 3, '100@gmail.com', now()),
  85. (46, 4, '110@gmail.com', now()),
  86. (47, 5, '110@gmail.com', now()),
  87. (48, 1, '200@gmail.com', now()),
  88. (49, 2, '200@gmail.com', now()),
  89. (50, 1, '300@gmail.com', now()),
  90. (51, 4, '300@gmail.com', now())
  91. ;
  92.  
  93. select * from `lesson`;
  94.  
  95. select * from `lesson`;
  96.  
  97. select * from `history`;
  98.  
  99. select * from `history`;
  100.  
  101. select distinct
  102. h.`email`,
  103. l.`id_course`
  104. from `lesson` l
  105. join `history` h on l.`id` = h.`id_lesson`
  106.  
  107. select distinct
  108. h.`email`,
  109. l.`id_course`
  110. from `lesson` l
  111. join `history` h on l.`id` = h.`id_lesson`
  112.  
  113. select
  114. cr.`email`,
  115. cr.`id_course`,
  116. L0.`id` as id_lesson
  117. from
  118. (
  119. select distinct
  120. h.`email`,
  121. L.`id_course`
  122. from `lesson` L
  123. join `history` h on L.`id` = h.`id_lesson`
  124. ) as cr
  125. join `lesson` L0 on cr.`id_course` = L0.`id_course`
  126. order by
  127. cr.`email` asc,
  128. cr.`id_course` asc,
  129. L0.`id` asc
  130.  
  131. select
  132. cr.`email`,
  133. cr.`id_course`,
  134. L0.`id` as id_lesson
  135. from
  136. (
  137. select distinct
  138. h.`email`,
  139. L.`id_course`
  140. from `lesson` L
  141. join `history` h on L.`id` = h.`id_lesson`
  142. ) as cr
  143. join `lesson` L0 on cr.`id_course` = L0.`id_course`
  144. order by
  145. cr.`email` asc,
  146. cr.`id_course` asc,
  147. L0.`id` asc
  148.  
  149. -- полная таблица прохождения/непрохождения уроков
  150. select
  151. L1.`email`,
  152. L1.`id_course`,
  153. L1.`id_lesson`,
  154. H1.`email`
  155. from
  156. (
  157. select
  158. cr.`email`,
  159. cr.`id_course`,
  160. L0.`id` as id_lesson
  161. from
  162. (
  163. select distinct
  164. h.`email`,
  165. L.`id_course`
  166. from `lesson` L
  167. join `history` h on L.`id` = h.`id_lesson`
  168. ) as cr
  169. join `lesson` L0 on cr.`id_course` = L0.`id_course`
  170. ) L1
  171. left outer join `history` H1
  172. on
  173. H1.`email` = L1.`email`
  174. and H1.`id_lesson` = L1.`id_lesson`
  175. order BY
  176. L1.`email`,
  177. L1.`id_course`,
  178. L1.`id_lesson`
  179.  
  180. -- полная таблица прохождения/непрохождения уроков
  181. select
  182. L1.`email`,
  183. L1.`id_course`,
  184. L1.`id_lesson`,
  185. H1.`email`
  186. from
  187. (
  188. select
  189. cr.`email`,
  190. cr.`id_course`,
  191. L0.`id` as id_lesson
  192. from
  193. (
  194. select distinct
  195. h.`email`,
  196. L.`id_course`
  197. from `lesson` L
  198. join `history` h on L.`id` = h.`id_lesson`
  199. ) as cr
  200. join `lesson` L0 on cr.`id_course` = L0.`id_course`
  201. ) L1
  202. left outer join `history` H1
  203. on
  204. H1.`email` = L1.`email`
  205. and H1.`id_lesson` = L1.`id_lesson`
  206. order BY
  207. L1.`email`,
  208. L1.`id_course`,
  209. L1.`id_lesson`
  210.  
  211. -- ученик не прошел весь курс
  212. select distinct
  213. L1.`email`,
  214. L1.`id_course`
  215. from
  216. (
  217. select
  218. cr.`email`,
  219. cr.`id_course`,
  220. L0.`id` as id_lesson
  221. from
  222. (
  223. select distinct
  224. h.`email`,
  225. L.`id_course`
  226. from `lesson` L
  227. join `history` h on L.`id` = h.`id_lesson`
  228. ) as cr
  229. join `lesson` L0 on cr.`id_course` = L0.`id_course`
  230. ) L1
  231. left outer join `history` H1
  232. on
  233. H1.`email` = L1.`email`
  234. and H1.`id_lesson` = L1.`id_lesson`
  235. where
  236. H1.`email` is null
  237.  
  238. -- ученик не прошел весь курс
  239. select distinct
  240. L1.`email`,
  241. L1.`id_course`
  242. from
  243. (
  244. select
  245. cr.`email`,
  246. cr.`id_course`,
  247. L0.`id` as id_lesson
  248. from
  249. (
  250. select distinct
  251. h.`email`,
  252. L.`id_course`
  253. from `lesson` L
  254. join `history` h on L.`id` = h.`id_lesson`
  255. ) as cr
  256. join `lesson` L0 on cr.`id_course` = L0.`id_course`
  257. ) L1
  258. left outer join `history` H1
  259. on
  260. H1.`email` = L1.`email`
  261. and H1.`id_lesson` = L1.`id_lesson`
  262. where
  263. H1.`email` is null
  264.  
  265. -- РЕЗУЛЬТАТ: пользователи прошедшие курс
  266.  
  267. select
  268. L3.`email`,
  269. L3.`id_course`
  270. from
  271. (
  272. select distinct
  273. h.`email`,
  274. l.`id_course`
  275. from `lesson` l
  276. join `history` h on l.`id` = h.`id_lesson`
  277. ) L3 left outer join
  278. (
  279. select distinct
  280. L1.`email`,
  281. L1.`id_course`
  282. from
  283. (
  284. select
  285. cr.`email`,
  286. cr.`id_course`,
  287. L0.`id` as id_lesson
  288. from
  289. (
  290. select distinct
  291. h.`email`,
  292. L.`id_course`
  293. from `lesson` L
  294. join `history` h on L.`id` = h.`id_lesson`
  295. ) as cr
  296. join `lesson` L0 on cr.`id_course` = L0.`id_course`
  297. ) L1
  298. left outer join `history` H1
  299. on
  300. H1.`email` = L1.`email`
  301. and H1.`id_lesson` = L1.`id_lesson`
  302. where
  303. H1.`email` is null
  304. ) L2 on
  305. L2.`email` = L3.`email`
  306. and L2.`id_course` = L3.`id_course`
  307. where
  308. L2.`email` is null
  309.  
  310. -- РЕЗУЛЬТАТ: пользователи прошедшие курс
  311.  
  312. select
  313. L3.`email`,
  314. L3.`id_course`
  315. from
  316. (
  317. select distinct
  318. h.`email`,
  319. l.`id_course`
  320. from `lesson` l
  321. join `history` h on l.`id` = h.`id_lesson`
  322. ) L3 left outer join
  323. (
  324. select distinct
  325. L1.`email`,
  326. L1.`id_course`
  327. from
  328. (
  329. select
  330. cr.`email`,
  331. cr.`id_course`,
  332. L0.`id` as id_lesson
  333. from
  334. (
  335. select distinct
  336. h.`email`,
  337. L.`id_course`
  338. from `lesson` L
  339. join `history` h on L.`id` = h.`id_lesson`
  340. ) as cr
  341. join `lesson` L0 on cr.`id_course` = L0.`id_course`
  342. ) L1
  343. left outer join `history` H1
  344. on
  345. H1.`email` = L1.`email`
  346. and H1.`id_lesson` = L1.`id_lesson`
  347. where
  348. H1.`email` is null
  349. ) L2 on
  350. L2.`email` = L3.`email`
  351. and L2.`id_course` = L3.`id_course`
  352. where
  353. L2.`email` is null
Add Comment
Please, Sign In to add comment