0

医薬品に関する情報を含むデータベースを作成する必要があります。

  • 1列目は、自動インクリメントを使用する一意の識別子フィールドです。例:「1」
  • 2列目には薬の名前が含まれています。例:「トラマドール」
  • 列3には、重みのリストが含まれています。例:「30g、40g、50g、60g」

php whileループと配列を使用すると、次の方法を使用してこのデータをエコーできます。

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

これはうまくいくでしょうが、私はそれが間違いなく最善の方法ではないことを知っています。重みのリストは、実際の個々の整数ではなく、varcharである必要があります。3列目に示されているように、単一の製品のさまざまな情報を保存してエコーするための最良の方法は何でしょうか。

4

2 に答える 2

2

これは実際には多対1の関係です。これは、単一の薬剤に対して複数の投与量があるためです。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は、必要なその他の情報とともに、の行に沿って別のテーブルを用意します。

2番目のオプションを使用した場合は、を使用し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]}"
}
于 2013-03-02T00:53:44.773 に答える
0
while ($row = mysql_fetch_assoc($result)) {
    echo "Drug Name: $row[drugName] Drug Weights: $row[drugWeights]";
}

あなたはあなたの列の名前を示さなかったので、私は推測しています。


ext/mysql新しいコードでは使用しないでください。PDOまたはに切り替えますmysqli

于 2013-03-02T00:53:10.357 に答える