Я пытаюсь соединить столбец dataofbirth, который находится в таблице studentdetails, с другой таблицей, называемой таблицей колледжа, мне нужны данные для рождения студента во второй таблице. Вот мой запрос.
$result = mysqli_query($con,"SELECT `DateofBirth` FROM `studentdetails` INNER JOIN `college`
ON `studentdetails`.StudentID = college.StudentID")or die ("Error: ".mysqli_error($con)");
Поэтому, когда я получу свой массив для второй таблицы, я смогу получить их данные о рождении ученика, не присоединяясь к ним физически.
Может кто-нибудь определить, что не так с моим синтаксисом?
Спасибо
Если вы хотите объединить две таблицы, вы должны предоставить список столбцов из обеих таблиц, которые вы хотите включить в объединенную / объединенную таблицу. Так:
Попробуйте это (заменив бит [добавить другие столбцы ..] другими столбцами, которые вы, возможно, захотите включить. И обратите внимание на псевдонимы таблиц, как они используются:
$result = mysqli_query($con,"SELECT s.DateofBirth, c.StudentID, [add other columns from college table here...] FROM studentdetails sd INNER JOIN college c
ON sd.StudentID = c.StudentID")or die ("Error: ".mysqli_error($con)");
о, и вы можете использовать mysqli вместо старых, устаревших, некрасивых, медленных, небезопасных, суицидальных мыслей, вызывающих расширение mysql_;)
Так и должно быть (из комментария: Дата рождения существует только в студенческих деталях)
$result = mysqli_query($con,"SELECT sd.DateofBirth FROM studentdetails as sd INNER JOIN college as c
ON sd.StudentID = c.StudentID")or die ("Error: ".mysqli_error($con)");
Учитывая, что мы родились только один раз (кроме фениксов), отношения между студентами и датой их рождения должны быть 1:1
отношения. Другими словами, столбец DateOfBirth
может быть объявлено в college
Таблица. Затем, чтобы выбрать дату их рождения, вы можете просто сделать:
select DateOfBirth
from college
where StudentID = :id
Но я вижу, что у вас уже есть другая таблица для хранения даты их рождения, чтобы вы могли сделать объединение, чтобы выбрать дату их рождения:
select d.DateOfBirth
from college c,
studentdetails d
where c.StudentID = d.StudentID;
Или же:
select d.DateofBirth
from studentdetails d
inner join college as c
on d.StudentID = c.StudentID;
Но эти запросы выше исключают студентов без записей в studentdetails
из вашего результата. Чтобы выбрать всех студентов с их соответствующей датой рождения, вы можете сделать:
select c.StudentID,
s.DateOfBirth
from studentdetails d
right join college c
on d.StudentID = c.StudentID;
это right join
запрос получает все студенты, даже если у них нет даты рождения в studentdetails
Таблица (right join
CMD на столе колледжа).
Вы можете сами выяснить, что является для вас лучшей альтернативой, но я рекомендую вам нормализовать этот столбец с моделью данных. DateOfBirth
внутри college
Таблица.