2012-06-24 28 views
7

Tôi có ba bảng như trong hình dưới đây.Làm cách nào để chọn dữ liệu từ nhiều bảng bằng cách sử dụng kết nối/truy vấn con đúng cách? (PHP-MySQL)

Lưu ý:Cột dẫn đầu bảng dự án lưu trữ ID nhân viên.

enter image description here

Những gì tôi muốn có là có thể lấy một cái gì đó giống như một trong bảng mục tiêu của tôi (chì, hiển thị tên chính của nhân viên đó)

tôi đã có thể làm điều đó bằng truy vấn bên dưới.

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 

Và có kết quả này: enter image description here

Các truy vấn mà tôi sử dụng là khá dài và có lẽ không được viết tốt, tôi muốn biết một cách khác nhau về cách tôi có thể đạt được kết quả tương tự bằng cách sử dụng tốt hơn truy vấn sql bằng cách sử dụng tham gia hoặc truy vấn phụ. (Tôi đã thêm một DISTINCT vào đầu projectdetails.ProjectDetailsID vì không có nó một số hàng được nhân đôi). Tôi đang tìm kiếm một truy vấn tốt hơn truy vấn tôi hiện đang sử dụng.

+3

Đừng nói, chỉ hành động. –

Trả lời

2

Hãy thử một cái gì đó như thế này (chưa được thử nghiệm nó, bạn có thể cung cấp cho nó một thử):

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

Hãy thử truy vấn này tôi hy vọng công việc của mình cho bạn

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 
Các vấn đề liên quan