我需要建立一个包含药物信息的数据库。
使用php while循环和数组,我可以使用以下方法回显此数据:
while ($row = mysql_fetch_array($result)) {
echo "Drug Name: {$row[1]} Drug Weights: {$row[2]}"
}
虽然这样可行但我知道这绝对不是最好的方法。权重列表必须是varchar,而不是实际的单个整数。如第三列所示,存储和回显单个产品的一系列信息的最佳方法是什么?
答案 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
。切换到PDO
或mysqli
。