0

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

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

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

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

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

4

2 回答 2

2

这实际上是多对一的关系,因为您有多个剂量与一种药物有关:http: //net.tutsplus.com/tutorials/databases/sql-for-beginners-part-3-database-关系/

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

$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 显示按常用字段分组的多行

另一方面,如果它用于跟踪处方,则有一个单独的表格id | drug_id | dosage_amount,沿着 ,以及您需要的任何其他信息。

如果您选择第二个选项,您将使用 anINNER 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]}"
}
于 2013-03-02T00:53:44.773 回答
0
while ($row = mysql_fetch_assoc($result)) {
    echo "Drug Name: $row[drugName] Drug Weights: $row[drugWeights]";
}

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


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

于 2013-03-02T00:53:10.357 回答