0

我有一个 MySQL 数据表,其中有超过 2 列。第一列具有唯一值临床试验值,而第二列具有疾病信息。在大多数情况下,一个单元格中有超过 2 个疾病名称对应一个 id。我想溢出那些单元格包含两种或两种以上疾病的行。搜索也有一个模式,即小字符后紧跟大写字符。例如 MalariaDengueTuberculosis 像这样。假设这三种疾病有唯一的 id,它应该显示如下:

      NCT-ID           disease
     4534343654       Maleria
     4534343654       Dengue
     4534343654       Tubercoulsosis
4

3 回答 3

1

如果您想在一个字符串列中存储一个或多个数据,您可以使用 JSON 数据格式。

于 2013-10-30T09:21:02.293 回答
0

要回答您的问题:

如果您坚持在一列中包含多个数据,您可以使用 php explode

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

$diseases现在是您可以做的一系列疾病:

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

然而

就我个人而言,在尝试破解解决方案之前,我现在会规范您的数据库。对您的表使用一个 ID,然后有一个疾病表链接到它。IE:

主表

     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-iddisease_id将是主键。

于 2013-10-30T09:45:24.700 回答
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";
    }
}

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

于 2013-10-30T09:50:29.857 回答