1

2 つのテーブルを結合するクエリがあります

SELECT DISTINCT prescriptions.prescription, prescription_history.dosage
FROM prescriptions
LEFT OUTER JOIN prescription_history ON prescriptions.prescription=prescription_history.prescription

現在、処方箋テーブルには主キーと処方箋名の 2 つのフィールドがあり、処方箋_履歴には処方箋名が処方箋の外部キーである 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

等々

しかし、代わりに処方箋の名前を 2 回取得し、続いて投与量を取得しています。

Advair  Advair   Symbicort   Symbicort
20mcg   50mcg    140/4.5     120/4.5  

等々

処方箋の名前を一度表示してから、その処方箋のすべての投与量を表示するにはどうすればよいでしょうか。array_unique を使用してみましたが、それは 1 つの処方箋名とそれに続く投与量のみを出力し、それらが同じでなくても他のすべての処方箋名を無視します

4

1 に答える 1

0

あなたがやりたいことは、2 つのテーブルをリンクし、それらを繰り返し処理して、処方箋の一意のインスタンスをそれぞれ見つけ、それに対応する各投与量を見つけることです。これを行う 1 つの方法は、処方箋を一意のキーとして配列を作成し、各処方箋に対応する投与量/処方箋の履歴を作成することです。したがって、次のようなことができます(テストされていません):

$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;
    }
于 2012-06-18T20:13:58.670 に答える