使用phpmyadmin,我如何在数据库中存储一系列数据? (利用多对多的关系)

时间:2013-03-02 00:26:29

标签: php mysql

我需要建立一个包含药物信息的数据库。

  • 第一列是具有自动增量的唯一标识符字段。例如,“1”
  • 第二栏包含药物的名称。例如,“Tramadol”
  • 第三列包含权重列表。例如,“30g,40g,50g,60g”

使用php while循环和数组,我可以使用以下方法回显此数据:

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

虽然这样可行但我知道这绝对不是最好的方法。权重列表必须是varchar,而不是实际的单个整数。如第三列所示,存储和回显单个产品的一系列信息的最佳方法是什么?

2 个答案:

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

答案 1 :(得分:0)

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

您没有指明列的名称,所以我猜。


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