2017-01-17 3 views
0

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

Например, у сотрудника с именем Foo есть employeeID из 1. Существует проект с именем Bar, у которого есть идентификатор projectID 1. Существует запись в employee_projects с employeeID = 1 и projectID = 1. Теперь, когда Foo загружает php-файл расписаний (после того, как он уже сохранил свой идентификатор $ employeeID в сеансе), я хотел бы только заполнить запись расписания для панели проектов. Вот код 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. Я не знаю, как изменить свой запрос, чтобы возвращать все столбцы в расписаниях ТОЛЬКО для проектов, назначенных этому сотруднику.

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

EDIT

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

+1

Можете ли вы пересмотреть временные листы? Таблица базы данных не является таблицей – Strawberry

+0

Какой запрос вы пытаетесь написать? Вы говорите, что хотите сгенерировать запрос «INSERT/UPDATE», но затем говорите, что он должен отображать проекты. Вы не показываете вещи с 'INSERT' и' UPDATE'. – Barmar

+0

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

ответ

1

Соединяет все таблицы вместе:

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 внешних ключей. Было бы лучше, если бы был один внешний ключ для ID в таблице employee_projects.

+0

Хм, я думаю, это намного лучше. Будет ли этот запрос работать, или это приведет к сокращению? select id, Monday, Tuesday, Wednesday, Thursday, Friday, WeekEndingDate, Notes, Представлено, employees_projects.EmployeeID, employees_projects.ProjectID из расписаний INNER JOIN employees_projects on timesheets.EmployeeID = employees_projects.EmployeeID AND timesheets.ProjectID = employees_projects.ProjectID WHERE табели.EmployeeID = $ eID – Pstivala7

+0

Извините, не уверен, как отформатировать в комментарии ^^ – Pstivala7

+0

Вы не можете форматировать в комментариях. Добавьте его в качестве обновления к вопросу. – Barmar

Смежные вопросы