SQL запрос на выборку из связных таблиц
Приложения на WinForms, бд phpmyadmin.
Есть 3 таблицы worker, shift, shift_days. В последней лежат id_Worker, id_Shift и Day.
Теперь, когда нажимаю на ячейку компонента DataGridWorker, то передаю id в переменную static_idWorker.
После, открывается новая форма, где нужно выбрать в какой день у воркера будет смена. Когда щелкаем по дню, то открывается новая форма с DataGridShift которая отображает таблицу shift для выбора смены, например "Открытие 9:00 - 13:00". После чего Это все уходит в таблицу shift_days.
Проблема в том, что когда я пытаюсь снова открыть форму с выбором дней, чтобы посмотреть уже отмеченные дни, я получаю только первого попавшегося воркера. Т.Е. если 23.05.22 в смене стоит 2 человека, то будет отображаться только 1.
Запрос:
public void displaShifts()
{
MySqlConnection connection = DataWorker.getConnection();
String sql = "SELECT * FROM shift_days INNER JOIN worker ON shift_days.id_Worker = worker.id WHERE Day = ?";
MySqlCommand cmd = new MySqlCommand(sql, connection);
cmd.Parameters.AddWithValue("Day", lbDays.Text + "/" + FrmShiftCalendar.static_monthShift + "/" + FrmShiftCalendar.static_yearShift);
MySqlDataReader reader = cmd.ExecuteReader();
if (reader.Read())
{
if(reader["id_Worker"].ToString() == FrmMain.static_idWorker)
{
lbShift.Text = "Смена";
cardShift.color = Color.Green;
}
}
reader.Dispose();
cmd.Dispose();
connection.Close();
}
Тут, наверное, бессмысленный inner join.
Но даже если я буду использовать обычный запрос
SELECT * FROM shift_days WHERE Day = ?
Выведется только 1 запись подходящая по условию.
Т.е. если у меня 25 числа стоят два воркера, она выведет одного, того, кто выше по таблице.
Ответы (1 шт):
У Вас стоит условие if(reader.Read()). Из-за чего выбирается только одна строка. Чтобы это исправить замените его на цикл, как показано в документации. Например так:
while (reader.Read())
{
if(reader["id_Worker"].ToString() == FrmMain.static_idWorker)
{
lbShift.Text = "Смена";
cardShift.color = Color.Green;
}
}