2013-05-28 15 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 

希望