Я пытаюсь позволить пользователю, которому назначено что-то, иметь возможность просматривать его с помощью PHP и MYSQL - PullRequest
0 голосов
/ 10 мая 2018

Я попытался найти ответ на этот вопрос, и я не могу найти тот, который соответствует тому, что я ищу.

Я создаю небольшое веб-приложение, которое позволяет администратору создавать материалы курса и тест, который будет назначен пользователю.

Я пытаюсь выяснить, как пользователь, которому назначен курс, может получить доступ к этому курсу, нажав кнопку.

Я создал одну таблицу, в которой хранится информация о пользователе, причем первичным ключом является идентификатор пользователя. У меня есть таблица курса, в которой хранятся все материалы и тест курса, а идентификатор курса является первичным ключом этой таблицы.

Я создал третью таблицу, которая является таблицей assign_courses, она содержит два внешних ключа. Один ссылается на идентификатор пользователя из пользовательской таблицы, а другой - на идентификатор курса в таблице курсов.

Я вставил несколько изображений, чтобы показать, что вы имеете в виду.

Я не могу понять синтаксис Sql для извлечения материалов курса и тестирования на основе таблицы assign_course.

Все отзывы приветствуются. Это два внешних ключа, которые ссылаются на идентификатор пользователя (id) и идентификатор курса (u_id)

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Мне кажется, что вы хотите использовать синтаксис SQL Join, который выглядит следующим образом:

select column1, column2, column3 etc...
from table1
join course on table1.id = course.id 
join assigned_course on table1.id = assigned_course.id

замените column1,2,3 и т. Д. Фактическими именами столбцов и замените foreign_key_name на фактическое имя внешнего ключа в подтаблице и то же самое для user_primary_key

здесь вы можете найти другие примеры соединений mysql здесь

Что касается того, как внедрить их в ваш html или php файл, это совсем другой вопрос, и для этого потребуется знать больше о настройке вашего кода в форме

место, которое довольно удобно для пользователя, может помочь с извлечением данных: здесь просто убедитесь, что вы знаете, что подготовленные операторы для вашего кода

0 голосов
/ 10 мая 2018

Не уверен, какие у вас имена столбцов, поэтому я использовал *.Вы можете использовать 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
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...