Anyone know how I can combine these in to one statement? It's the lesson_id(s) for ALL sessions from a specific block that I'm after...
$query = "
SELECT session_id FROM cdu_blocks_sessions
JOIN cdu_sessions ON cdu_sessions.id = cdu_blocks_sessions.session_id
WHERE block_id = $block_id
AND enabled = 1";
$session_ids = cdu_get_query_results($db, $query, __LINE__);
$lesson_ids = array();
foreach ($session_ids as $session_id) {
$query = "
SELECT lesson_id FROM cdu_sessions_lessons
JOIN cdu_lessons ON cdu_lessons.id = cdu_sessions_lessons.lesson_id
WHERE session_id = " . $session_id['session_id'] . "
AND enabled = 1";
$lesson_ids = array_merge($lesson_ids, cdu_get_query_results($db, $query, __LINE__));
}
cdu_sessions:
------------------------------
|id |name |enabled |
------------------------------
|1 |session 1 |1 |
|2 |session 2 |1 |
|3 |session 3 |1 |
|4 |session 4 |0 |
|5 |session 5 |1 |
|6 |session 6 |0 |
|7 |session 7 |1 |
|8 |session 8 |1 |
------------------------------
cdu_blocks_sessions:
---------------------------
|id |block_id |session_id |
---------------------------
|1 |1 |1 |
|1 |1 |2 |
|1 |1 |3 |
|1 |2 |4 |
|1 |2 |5 |
|1 |2 |6 |
---------------------------
cdu_lessons:
-----------------------------
|id |name |enabled |
-----------------------------
|1 |lesson 1 |1 |
|2 |lesson 2 |1 |
|3 |lesson 3 |1 |
|4 |lesson 4 |1 |
|5 |lesson 5 |0 |
-----------------------------
cdu_sessions_lessons:
----------------------------
|id |session_id |lesson_id |
----------------------------
|1 |1 |1 |
|1 |1 |2 |
|1 |1 |3 |
|1 |2 |4 |
|1 |2 |5 |
----------------------------
Try this query for SQL Server
SELECT *
FROM (
SELECT session_id FROM cdu_blocks_sessions
JOIN cdu_sessions ON cdu_sessions.id = cdu_blocks_sessions.session_id
WHERE block_id = $block_id
AND enabled = 1
) S
CROSS APPLY (
SELECT lesson_id FROM cdu_sessions_lessons
JOIN cdu_lessons ON cdu_lessons.id = cdu_sessions_lessons.lesson_id
WHERE session_id = S.session_id
AND enabled = 1
) L
More on cross apply
SQL Server CROSS APPLY and OUTER APPLY
Another way
SELECT L.*
FROM (
SELECT session_id FROM cdu_blocks_sessions
JOIN cdu_sessions ON cdu_sessions.id = cdu_blocks_sessions.session_id
WHERE block_id = $block_id
AND enabled = 1
) S
INNER JOIN (
SELECT lesson_id, session_id FROM cdu_sessions_lessons
JOIN cdu_lessons ON cdu_lessons.id = cdu_sessions_lessons.lesson_id
WHERE enabled = 1
) L S.session_id = L.session_id
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.