Intereting Posts
Прерывистые 500 ошибок Apache, работающих под управлением Zend Framework с несколькими виртуальными хостами Запуск PHP: невозможно загрузить динамическую библиотеку php5.4.3 / ext / php_ffmpeg.dll не является допустимым приложением Win32 Что означает $ this на самом деле> Codeigniter Как предотвратить показ символа символа вопроса, даже используя mb_substr и utf-8 Как изменить поиск в WordPress, чтобы он запрашивал термины таксономии и термины категории? Функция fmod возвращает неверный результат Регулярное выражение для адреса улицы Не удалось обновить запасное количество товара для продукта в Magento 1.6.2 DOMDocument simple GetElementsByTagName не работает? Как определить, переносится ли файл через ftp Как исправить предупреждение «Создание объекта по умолчанию из пустого значения» в PHP Как получить реферер, платные / натуральные и ключевые слова для текущего посетителя на PHP с помощью новой Google Analytics? Фильтрация результатов по дате в поле метки времени как добавить элемент в форматированный файл json-файла Значение в базе данных «участники» показывает ссылку, когда пользователь является администратором

Как правильно выбрать данные из нескольких таблиц с помощью соединений / подзапросов? (РНР-баз данных)

У меня три таблицы, как показано ниже.

Примечание. В ведущем столбце таблицы проекционного менеджера хранится идентификатор сотрудника.

введите описание изображения здесь

То, что я хочу иметь, – это получить что-то вроде таблицы в моей цели (Lead, отображает название этого сотрудника)

Я смог сделать это, используя запрос ниже.

SELECT DISTINCT projectdetails.ProjectDetailsID, projectheader.ProjectID, projectheader.ProjectName, projectheader.Lead, projectheader.StartDate, projectheader.EndDate, projectheader.Status, projectheader.Remarks, projectdetails.EmployeeID, employee.Firstname, employee.Lastname, Lead.Leadname FROM projectheader, projectdetails, employee, ( SELECT projectheader.ProjectID AS projid, CONCAT(employee.Firstname,' ',employee.Lastname) AS Leadname FROM employee, projectheader, projectdetails WHERE projectheader.ProjectID = projectdetails.ProjectID AND projectheader.Lead = employee.EmployeeID ) AS Lead WHERE projectheader.ProjectID = projectdetails.ProjectID AND projectdetails.EmployeeID = employee.EmployeeID AND projectheader.ProjectID = Lead.projid AND projectdetails.ProjectID = Lead.projid 

И получил этот результат: введите описание изображения здесь

Запрос, который я использовал, довольно длинный и, возможно, не очень хорошо написан, я хочу узнать по-другому о том, как я мог бы достичь того же результата, используя лучший SQL-запрос, либо с помощью соединения, либо подзапроса. (Я добавил DISTINCT в начале описания проекта.ProjectDetailsID, потому что без него несколько строк дублируются). Я ищу лучший запрос, чем тот, который я сейчас использую.

Попробуйте что-то вроде этого (не проверял его, вы можете попробовать):

 SELECT projectdetails.ProjectDetailsID, projectheader.ProjectID, projectheader.ProjectName, projectheader.Lead, projectheader.StartDate, projectheader.EndDate, projectheader.Status, projectheader.Remarks, projectdetails.EmployeeID, employee.Firstname, employee.Lastname, CONCAT(Lead.Firstname,' ',Lead.Lastname) AS Leadname FROM projectheader, projectdetails, employee, employee as Lead WHERE projectheader.ProjectID = projectdetails.ProjectID AND projectdetails.EmployeeID = employee.EmployeeID AND projectheader.Lead = Lead.EmployeeID 

Попробуйте этот запрос, я надеюсь, что его работа для вас

 SELECT pd.ProjectDetailsID,ph.*,e.* FROM `projectdetail` pd INNER JOIN projectheader ph ON ph.ProjectID = pd.ProjectID INNER JOIN employee e ON e.EmployeeID = pd.EmployeeID