我有一个连接两个表的查询
SELECT DISTINCT prescriptions.prescription, prescription_history.dosage
FROM prescriptions
LEFT OUTER JOIN prescription_history ON prescriptions.prescription=prescription_history.prescription
现在处方表有两个字段主键和处方名称,prescription_history有4个字段,其中处方名称是处方的外键。 为了使这一点更清晰。
Prescriptions table:
id prescription
1 advair
.. ....
等等
Prescription_History
id prescription account_num dosage
1 advair 989 20mcg
2 advair 567 50mcg
.. ... ... ...
等等。
如果我要输出这个以创建复选框,我希望看到处方名称后面跟着剂量:
Advair Symbicort
20mcg 140/4.5
50mcg 120/4.5
等等
但是,相反,我接受处方名称两次,然后是剂量。
Advair Advair Symbicort Symbicort
20mcg 50mcg 140/4.5 120/4.5
等等
我怎样才能显示处方名称,然后显示该处方的所有剂量。我尝试使用array_unique,但只会输出一个处方名称后跟剂量,它会忽略所有其他处方名称,即使它们不相同
答案 0 :(得分:0)
听起来你要做的就是链接两个表,然后迭代它们,找到处方的每个唯一实例,并找到与之对应的每个剂量。你可以这样做的一种方法是将一个处方作为一个独特的钥匙,然后剂量/处方历史对应每个处方。所以你可以这样做(未经测试):
$sql = "SELECT DISTINCT prescriptions.prescription, prescription_history.dosage, prescription_history.account_num FROM prescriptions LEFT OUTER JOIN prescription_history ON rescriptions.prescription=prescription_history.prescription"
$result = mysql_query($sql) or die("MySQL-Error: " . mysql_error());
$arr = array();
while ($new = mysql_fetch_row($result)) {
if (array_key_exists($new[0], $arr)) {
array_push($arr[$new[0]], array($new[1], $new[2]));
} else {
$arr[$new[0]] = array();
array_push($arr[$new[0]], array($new[1], $new[2]));
}
}
之后,您可以使用foreach循环迭代它:
foreach ($arr as $key) {
print "Prescription: " . $key
foreach($key as $value) {
print_r$value;
}