2016-03-07 17 views
0

當他更改其狀態(日期,狀態,ID(FK))時,我有一張僱員(ID)和表的表。我需要顯示的員工列表排序按指定的日期查找參數並比較其他表中的日期,按參數排序

employees 
ID, Name 
1, Jack 
2, Ralf 
3, Jenny 

changes 
IDchange, Date, Status, ID 
1, 2015-01-01, 2, 1  //Jack started in 2015-1-1 with status 2 
2, 2015-03-01, 1, 2  //Ralf started in 2015-3-1 with status 1 
3, 2015-04-01, 1, 3  //Jenny started in 2015-4-1 with status 1 
4, 2015-08-01, 2, 2  //Ralf change status to 2 in 2015-8-1 
5, 2015-10-01, 3, 2  //Ralf change status to 3 in 2015-10-1 
6, 2016-04-01, 4, 1  //Jack change status to 4 in 2016-04-1 

我試圖theese任何日期$ My_Date的狀態,但我不知道如何修復它爲所有的變化,它僅檢查最後日期變更

<?php 
$sql2="SELECT *, Status 
    FROM employees s 
    JOIN (
      SELECT MAX(Date) max_date, ID, Status 
      FROM changes sml 
      WHERE date <= '".$My_Date."' 
     GROUP BY ID 
    ) sml ON (sml.ID = s.ID) 
ORDER BY Status, Name ASC"; 

$result2 = MySQL_Query($sql2); 
... ?> 

回答

1

您可以使用相關子查詢,以獲得status每每個員工的ID

SELECT ID, Name, (SELECT Status 
        FROM changes AS c 
        WHERE e.ID = c.ID AND date <= ? 
        ORDER BY date DESC LIMIT 1) AS Status 
FROM employees AS e 
ORDER BY Status, Name ASC 

該子查詢將返回當前員工的狀態,即更接近參數化的日期值。

+0

謝謝,可以,小問題:我怎麼容易得到變更日期? – DaveMX

+0

@DaveMX你是指什麼意思*更改日期*? –

+0

是請更改日期 – DaveMX

0

我們可以使用簡單的連接查詢來完成。當我們正在過date作爲參數,也沒有必要計算max(date),下面的例子:

select e.name, s.date, s.status 
from employee e join status s on e.id = s.id 
where s.date = ? 
order by s.status desc