лучший способ структурировать базу данных студенческих оценок с переменными столбцами - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь создать систему поиска оценок учеников с помощью PHP и MYSQL, учащиеся разных этапов изучают разные предметы, поэтому у меня не может быть одной таблицы для всех учащихся, вместо этого я структурировал ее так, чтобы у каждой ступени была своя таблица.но я не знаю, как лучше всего искать ученика в такой структуре.

Текущая структура выглядит следующим образом: - таблица первого этапа:

CREATE TABLE `first stage` ( `ID` VARCHAR(10) NOT NULL PRIMARY KEY
,`name` VARCHAR(70) NOT NULL 
,`chemistry` VARCHAR(70) NOT NULL 
,`physics` VARCHAR(70) NOT NULL 
,`biology` VARCHAR(70) NOT NULL 
,`avg` VARCHAR(70) NOT NULL )

таблица второго этапа:

CREATE TABLE `second stage` ( `ID` VARCHAR(10) NOT NULL PRIMARY KEY
,`name` VARCHAR(70) NOT NULL 
,`math` VARCHAR(70) NOT NULL 
,`english` VARCHAR(70) NOT NULL 
,`french` VARCHAR(70) NOT NULL 
,`avg` VARCHAR(70) NOT NULL )

В столбцах ID содержится уникальная строка, сгенерированная случайным образом в php на основе имени студента и случайного числа в виде соли, этот ID передается студенту, поэтому, когда он вводитИдентификатор в html-форме php-скрипт должен выбирать свои оценки из mysql и отображать их

до тех пор, пока ученик не введет идентификатор и не выберет его / ее этап: - при условии, что ученик отправляет форму с$_POST['id'] = 6e34b0f66c и $_POST['stage'] = first stage тогда запрос mysql используется следующим образом:

select * from `first stage` where ID='6e34b0f66c'

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

Я попытался использовать объединение, чтобы запросить все таблицы для идентификатора:

select * 
from `first stage` 
where ID='6e34b0f66c' 
union 
select * 
from `second stage` 
where ID='6e34b0f66c'

это работает и возвращает правильный результат, но ему не хватает имени таблицы (то есть он возвращает только оценки, ноЯ не знаю, из какой таблицы пришел результат, поэтому не могу отобразить сцену для студента).

Я также пытался использовать несколько таблиц в предложении FROM:

select * from `second stage` `first stage` where ID='6e34b0f66c'

но я обнаружил, что это запрашивает только первую таблицу в предложении FROM и полностью игнорирует вторую.

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

...