如何从MySQL分割成多行?

时间:2013-10-30 09:16:46

标签: php mysql

我有一个MySQL数据表,其中我有两列以上。第一列具有独特的临床试验值,而第二列具有疾病信息。在大多数情况下,对于单个id,在一个单元中存在超过2个疾病名称。我想把这些细胞包含两种或两种以上疾病的行排出。还有一种用于搜索的模式,即小字符后面紧跟着大写字符。 MalariaDengueTuberculosis就是这样。假设这三种疾病都有独特的ID,它应该表现如下:

      NCT-ID           disease
     4534343654       Maleria
     4534343654       Dengue
     4534343654       Tubercoulsosis

3 个答案:

答案 0 :(得分:1)

如果要将一个或多个数据存储在一个String列中,可以使用JSON数据格式化。

答案 1 :(得分: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将成为主键。

答案 2 :(得分: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";
    }
}

但是这样你就会产生很多疑问。如果您可以重新考虑数据库结构,那么我建议您这样做。