2013-03-02 56 views
0

我需要制作一个包含药物信息的数据库。使用phpmyadmin,我将如何在数据库中存储一系列数据? (利用多对多的关系)

  • 第一列是自动递增的唯一标识符字段。例如“1”
  • 第二列包含药物的名称。例如“曲马多”
  • 第三列包含权重列表。例如, “30克,40G,50G,60G”

使用PHP while循环和数组,我可以使用下面的方法回应此数据:

while ($row = mysql_fetch_array($result)) { 
    echo "Drug Name: {$row[1]} Drug Weights: {$row[2]}" 
} 

虽然这工作,我知道这绝对不是最好的方式。权重列表必须是一个varchar,而不是实际的单个整数。如第3栏所示,存储和回应单个产品的一系列信息的最佳方式是什么?

回答

2

这实际上是一个多到一的关系,如您有关于多剂量的单一药物:http://net.tutsplus.com/tutorials/databases/sql-for-beginners-part-3-database-relationships/

至于你的问题,这取决于你想如何使用上下文数据。如果剂量是用作药房提供的各种产品(即一小瓶曲马多和一个大瓶子)的参考,那么我可能会为每个剂量添加一个新的行,因为你可能会首先有一组有限的价值可供选择,它更能代表商店的库存情况。然后,您可以遍历它与嵌套循环是这样的:

$drugs = array() 
while ($row = mysql_fetch_array($result)) { 
    $drugs[$row['name']][] = $row['dosage_amount'] 
} 
foreach ($drugs AS $drug => $dosages) { 
    echo '<h2>'. htmlentities($drug, ENT_COMPAT, 'UTF-8') .'</h2>'; 
    foreach ($dosages AS $dosage) { 
     echo '<br><em>'. htmlentities($dosage, ENT_COMPAT, 'UTF-8') .'</em>'; 
    } 
} 

参考:PHP MySQL display multiple rows grouped by common fields

在另一方面,如果它是用来跟踪处方,然后沿的id | drug_id | dosage_amount行一个单独的表,沿与您需要的任何其他信息。

如果使用第二个选项去了,你可以使用一个INNER JOIN来获取所需的数据:

SELECT drugs.name, prescriptions.dosage_amount 
FROM drugs 
INNER JOIN prescriptions 
ON drugs.id=prescriptions.drug_id 

参考:http://www.w3schools.com/sql/sql_join_inner.asp

从那里,你可以通过它遍历你以同样的方式这样做已经:

while ($row = mysql_fetch_array($result)) { 
    echo "Drug Name: {$row[0]} Drug Weight: {$row[1]}" 
} 
+0

嗨乔尔,你觉得你可以详细说一下第一个选项?每种药物每个只有3-4个尺寸,但尺寸的数量各不相同。例如,许多只有1个尺寸。我怎样才能在网页上回复每个药物的名称,并在每个名称下回显所有的大小? 我需要在我的数据库查询中实现两个循环,一个用来回显所有药物,另一个用来回显每种药物的大小? – Starkers 2013-03-02 01:34:16

+0

我编辑了一个格式化版本的答案:) – 2013-03-02 03:03:34

+0

非常感谢谢谢! – Starkers 2013-03-03 17:29:24

0
while ($row = mysql_fetch_assoc($result)) { 
    echo "Drug Name: $row[drugName] Drug Weights: $row[drugWeights]"; 
} 

你没有指出你的列的名称,所以我猜。


请不要在新代码中使用ext/mysql。切换到PDOmysqli

相关问题