Не уверен, какие у вас имена столбцов, поэтому я использовал *
.Вы можете использовать JOIN
(AKA INNER JOIN
), чтобы связать таблицы вместе.Вы присоединяетесь к первичным ключам 2 таблиц.
Я создал одну таблицу, в которой хранится информация о пользователе, причем первичным ключом является идентификатор пользователя.У меня есть таблица курса, в которой хранятся все материалы и тест курса, причем идентификатором курса является первичный ключ этой таблицы.
Я использовал id
для вашей пользовательской таблицы и course_id
для курсаТаблица.Изменить по мере необходимости.
Найти все курсы для данного пользователя.
SELECT a.*
FROM course a
JOIN assigned_course b ON a.course_id = b.id
WHERE b.u_id = :userId
;
Найти всех пользователей для данного курса.
SELECT a.*
FROM user a
JOIN assigned_course b ON a.id = b.u_id
WHERE b.id = :courseId
;
РЕДАКТИРОВАТЬ # 1 - подзапрос без JOIN
Спасибо за ваш отзыв, как я уже говорил выше, я надеялся избежать присоединения.
Я настоятельно рекомендую вам изучить соединения.Они необходимы, когда вам нужно запросить более 1 таблицы.В этом случае вы можете использовать подзапрос, чтобы найти подходящие курсы для пользователя, но вы не сможете получить доступ к этим данным пользователя одновременно;это сила соединения.Ниже я приведу последний пример, показывающий, как получать курсы и пользовательские данные одновременно.
Поиск всех курсов для данного пользователя (с использованием подзапроса)
SELECT a.*
FROM course a
WHERE course_id IN (
SELECT id
FROM assigned_course b
WHERE u_id = :userId)
;
Последний пример, показывающий курсы, относящиеся к пользователям (многие ко многим)
SELECT * -- You now have access to a, b, and c data
FROM course a
JOIN assigned_course b ON a.course_id = b.id -- joined by PKs
JOIN user c ON c.id = b.u_id -- joined by PKs
WHERE c.id = :userId
;