2013-10-30 80 views
0

我有一個MySQL數據表,其中我有超過2列。第一欄有一個獨特的臨牀試驗值,而第二欄有疾病信息。在大多數情況下,在一個細胞中有一個以上的疾病名稱爲單個身份證。我想分散那些細胞含有兩種或兩種以上疾病的細胞。還有一種用於搜索的模式,即小字符緊跟着大寫字母。這是瘧疾的結核病。假設這三種疾病有獨特的ID,它應該顯示如下所示:如何從MySQL中將行拆分成多行?

 NCT-ID   disease 
    4534343654  Maleria 
    4534343654  Dengue 
    4534343654  Tubercoulsosis 
+2

NCT-ID從哪裏來?你能否顯示目前的數據是什麼樣的? –

+0

這是有三列的行,「|」是分隔符:NCT01766830 |內臟利什曼病人類非洲錐蟲病腸道腫瘤結節病布魯氏菌病鉤端螺旋體病放射性疾病立克次體病艾滋病結核病瘧疾闌尾炎肝膿腫|不適用 – user2818537

+1

因此,每種疾病都有相同的ID「01766830」? –

回答

1

如果你想存儲在一個String列,一個或更多的數據,你可以使用JSON數據格式。

0

要回答你的問題:

如果你堅持在一列多的數據,你可以使用PHP explode

$diseases = explode("|", $row['disease']); //Changing | to whatever separates your diseases. 

$diseases現在是你的疾病的數組,你可以這樣做:

foreach ($diseases as $disease) 
{ 
    echo $disease; 
} 

然而

就我個人而言,我會在嘗試破解解決方案之前正常化您的數據庫。對你的表使用一個ID,然後有一個疾病表來鏈接到它。即:

主表

 NCT-ID   
    4534343654  
    5768788544  
    3i33i3i078  

疾病表

disease_id nct_id   disease 
1   4534343654  Broken Wind 
2   4534343654  Chronic Nosehair 
3   4534343654  Corrugated Ankles 
4   5768788544  Discrete Itching 
5   3i33i3i078  Gastric Ejections 
6   3i33i3i078  Bloaty Head 

這允許針對一個nct-id多種疾病。主要關鍵是disease_id

0

這對我來說不是很清楚你想要達到什麼目的。由於您使用的是PHP,因此您可以嘗試使用PDO讀取表格並打印結果。例如:

$sql = 'SELECT diseases FROM diseases_info_table'; 
foreach($pdo->query($sql) as $row) { 
    $diseases = preg_split('/(?=[A-Z])/', $row['diseases']); 
    $sql2 = 'SELECT * FROM diseases WHERE disease_name IN ("' . implode('","', $diseases) . '")'; 
    foreach ($pdo->query($sql2) as $row) { 
     print $row['NCT-ID '] . "\t"; 
     print $row['disease'] . "\t"; 
    } 
} 

但是這樣你就會產生很多查詢。如果可以重新考慮數據庫結構,那麼我會推薦這樣做。

+0

你缺少的東西是疾病可以是兩個字。實際上將疾病分開的是小寫字母,後跟大寫字母。 '[a-z] [A-Z]' –

+0

實際上preg_split用大寫字母分隔單詞,創建兩種疾病的數組。測試它和「瘧疾結核病」變成陣列([0] => [1] =>瘧疾[2] =>登革熱[3] =>結核病)。第一個可以跳過。 – jazZRo