2012-06-24 15 views
7

Tengo tres tablas como se muestra en la imagen de abajo.¿Cómo seleccionar datos de múltiples tablas utilizando joins/subquery correctamente? (PHP-MySQL)

Nota:Columna clave de tabla almacena projectheader un ID de empleado.

enter image description here

Lo que queremos es que sea capaz de recuperar algo así como el que está en la mesa mi objetivo (plomo, muestra el nombre principal de ese empleado)

yo era capaz de hacer que el uso de la consulta a continuación.

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 

y consiguió este resultado: enter image description here

La consulta que he utilizado es bastante largo y tal vez no sea bien escrito, me gustaría saber de una manera diferente de cómo podría conseguir el mismo resultado mediante una mejor consulta sql ya sea mediante join o una subconsulta. (Agregué un DISTINCT al comienzo de los detalles del proyecto. ProjectDetailsID porque sin él algunas filas están duplicadas). Estoy en busca de una mejor consulta que la que estoy usando actualmente.

+3

no hablan, Sólo actúa. –

Respuesta

2

intentar algo como esto (no lo he probado, puede darle una oportunidad):

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 
2

Intentar esta consulta espero su trabajo por usted

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 
Cuestiones relacionadas