2013-03-02 73 views
0

我需要製作一個包含藥物信息的數據庫。使用phpmyadmin,我將如何在數據庫中存儲一系列數據? (利用多對多的關係)

  • 第一列是自動遞增的唯一標識符字段。例如「1」
  • 第二列包含藥物的名稱。例如「曲馬多」
  • 第三列包含權重列表。例如, 「30克,40G,50G,60G」

使用PHP while循環和數組,我可以使用下面的方法迴應此數據:

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

雖然這工作,我知道這絕對不是最好的方式。權重列表必須是一個varchar,而不是實際的單個整數。如第3欄所示,存儲和迴應單個產品的一系列信息的最佳方式是什麼?

回答

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]}" 
} 
+0

嗨喬爾,你覺得你可以詳細說一下第一個選項?每種藥物每個只有3-4個尺寸,但尺寸的數量各不相同。例如,許多隻有1個尺寸。我怎樣才能在網頁上回復每個藥物的名稱,並在每個名稱下回顯所有的大小? 我需要在我的數據庫查詢中實現兩個循環,一個用來回顯所有藥物,另一個用來回顯每種藥物的大小? – Starkers 2013-03-02 01:34:16

+0

我編輯了一個格式化版本的答案:) – 2013-03-02 03:03:34

+0

非常感謝謝謝! – Starkers 2013-03-03 17:29:24

0
while ($row = mysql_fetch_assoc($result)) { 
    echo "Drug Name: $row[drugName] Drug Weights: $row[drugWeights]"; 
} 

你沒有指出你的列的名稱,所以我猜。


請不要在新代碼中使用ext/mysql。切換到PDOmysqli

相關問題