Выбираете только те значения, где присутствует конкретная комбинация из 2 столбцов?

У меня есть таблица «расписания», в которую я хотел бы вставить пустые записи, основанные на другой сводной таблице, называемой employee_projects (ссылаясь на employeeID и projectID). Я хочу сгенерировать запрос INSERT / UPDATE в таблице расписаний, который будет по существу использовать EmployeeID в качестве входных данных, чтобы затем отобразить все проекты, которые сотрудник назначил им через таблицу employee_projects.

Например, сотрудник с именем Foo имеет employeeID, равный 1. Существует проект с именем Bar, у которого projectID равен 1. Существует запись в employee_projects с employeeID = 1 и projectID = 1. Теперь, когда Foo загружает php-файл расписаний (после того, как он уже сохранил свой $ employeeID в сеансе), я хотел бы заполнить только запись расписания для проекта Bar. Вот код php, который я использую для создания таблицы расписания, вы можете увидеть столбцы, которые я использую:

 $result = $conn->query("select timesheets.id, Monday, Tuesday, Wednesday, Thursday, Friday, WeekEndingDate, Notes, Submitted, EmployeeID, ProjectID, projects.ProjectName from timesheets INNER JOIN projects ON timesheets.ProjectID=projects.id WHERE EmployeeID=$eId");

while ($row = $result->fetch_assoc()) {

unset($id,$Mon,$Tues,$Wed,$Thurs,$Fri,$WeekEndingDate,$notes,$employeeId,$projectId,$projectName);
$id = $row['id'];
$Mon = $row['Monday'];
$Tues = $row['Tuesday'];
$Wed = $row['Wednesday'];
$Thurs = $row['Thursday'];
$Fri = $row['Friday'];
$WeekEndingDate= $row['WeekEndingDate'];
$notes = $row['Notes'];
$employeeId = $row['EmployeeID'];
$projectId = $row['ProjectID'];
$projectName = $row['ProjectName'];

echo '<tr><td>'. $projectId.'</td><td>'.$projectName.'</td><td><input type="text" id="Mon" value='.$Mon.'></td><td><input type="text" id="Mon" value='.$Tues.'></td><td><input type="text" id="Mon" value='.$Wed.'></td><td><input type="text" id="Mon" value='.$Thurs.'></td><td><input type="text" id="Mon" value='.$Fri.'></td><td>'.$notes.'</td></tr>';

Как видите, запрос, который я использую, устарел, потому что это ВНУТРЕННЕЕ СОЕДИНЕНИЕ только таблицы проектов, а не employee_projects. Я не знаю, как изменить свой запрос, чтобы он возвращал все столбцы в расписаниях ТОЛЬКО для проектов, которые назначены этому сотруднику.

Любая помощь?

РЕДАКТИРОВАТЬ

Извините, я постараюсь уточнить. Я использую php для создания формы на основе запроса SELECT, показанного выше в коде для $ result. Это правильно построение формы, но в данный момент отображаются все проекты, найденные в таблице проектов (т.е. projectID 1, projectID2 и т. Д.). Мне нужен запрос SELECT, который будет возвращать только проекты, назначенные сотруднику на основе комбинации столбцов employeeID / projectID в employee_projects. После этого я буду использовать свой php-код для создания запроса INSERT после нажатия кнопки submit.

0

Решение

Соедините все столы вместе:

SELECT ...
FROM projects AS p
JOIN employee_projects AS ep ON p.id = ep.projectID
JOIN employees AS e ON e.id = ep.employeeID
LEFT JOIN timesheets AS t ON t.projectID = p.id and t.employeeID = e.id
WHERE p.name = 'Bar'

Я использовал LEFT JOIN за timesheets таким образом, вы все равно получите строку для каждого сотрудника, назначенного для проекта, даже если некоторые из них не заполнили табели учета рабочего времени.

Кажется, что здесь есть некоторая избыточность, которая может быть нормализована, так как оба employee_projects а также timesheets иметь projectID а также employeeID внешние ключи. Было бы лучше, если бы в employee_projects Таблица.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector