我有一个MySQL数据表,其中我有两列以上。第一列具有独特的临床试验值,而第二列具有疾病信息。在大多数情况下,对于单个id,在一个单元中存在超过2个疾病名称。我想把这些细胞包含两种或两种以上疾病的行排出。还有一种用于搜索的模式,即小字符后面紧跟着大写字符。 MalariaDengueTuberculosis就是这样。假设这三种疾病都有独特的ID,它应该表现如下:
NCT-ID disease
4534343654 Maleria
4534343654 Dengue
4534343654 Tubercoulsosis
答案 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";
}
}
但是这样你就会产生很多疑问。如果您可以重新考虑数据库结构,那么我建议您这样做。