2013-05-28 16 views
2

我有兩列,即:Chainup記錄有兩列PHP的MySQL

caseSno     newCaseSno 
    7592      7593 
    7591      7592 
    2935      7591 
    7092      7572 

在上表中caseSno和新CaseSno兩列其中caseSno是原來的病例數,而案件已後轉移給其他人newCaseSno保留新號碼,現在我想查找此表中的所有關聯案例。即在第一行caseSno 7593應該在我的報告中顯示4次​​,因爲它與7593,7592,7591和2935相關聯。簡單地說,我需要一些東西,如朋友朋友機制

請幫助我,如何找出與其他每列相關的所有記錄。 簡單而快速的可執行查詢將不勝感激。 在此先感謝。

回答

0

一個想法是定義三個表:

CaseTbl   Person    CasePersonHistory 
------------ --------------  ------------------ 
case_id (PK) person_id (PK)  case_id (PK) 
case_name  etc etc...   person_id (PK) 
case_descr       seq_num (PK) 
etc etc...       etc etc... 

編輯:不能使用case的表名......而是選擇其他

CaseTbl總是有一個ID ...這是獨特的描述。 Person也是如此。 CasePersonHistory提供案件和序號之間的多對多關係,其中最高的seq_num將是目前擁有該案件的人,而所有較低的seq_num是先前擁有案件的人。

因此,舉例來說,如果

fred's person_id = 54 
mikes's person_id = 55 
jane's person_id = 56 

如果case_id1,弗雷德原本就有的情況下,然後把它交給邁克,誰然後把它交給簡則CasePersonHistory會是什麼樣......

現在
CasePersonHistory 
------------------ 
case_id  person_id  seq_num 
----------------------------------- 
1   54   1 
1   55   2 
1   56   3 

你可以找出誰是當前所有者或情況的業主們通過基於該CASE_ID選擇表中,並找到序列號的最大:

SELECT MAX(seq_num) FROM CasePersonHistory WHERE case_id = 1; 

或讓誰目前擁有的情況下幫助:)

的人...

SELECT person_id FROM CasePersonHistory WHERE case_id = 1 order by seq_no DESC LIMIT 1 

希望