2013-01-13 55 views
1

我有兩張表,化學品&消耗品。 「化學品」存儲所有關於化學品(配方,安全等)的一般信息和「消耗品」存儲關於存儲在各個房間中的存貨&的信息等。 通用字段是「CAS」(化學文摘服務註冊號 - 組合數字和連字符)。返回來自第二個表的搜索結果

我想搜索的「化學品」表並從兩個表

返回信息

問題1 - 我應該加入他們的數據庫(Navicat的),或者只是通過PHP查詢?

問題2 - 爲什麼下面的代碼不工作?

$item = $_POST['item']; 

$chem = mysql_query(" 
SELECT * 
FROM Chemicals 
INNER JOIN Consumables 
ON Chemicals.Name_Chem1 = '%$item%'"); 

while ($row = mysql_fetch_array($chem)){ 

echo 
"<table border='0'> 
<tr class='content'> 
<th>Name</th> 
<th>Quantity</th> 
<th>GHS Code</th> 
<th>Formula</th> 
<th>CAS</th> 

</tr>"; 

while($row = mysql_fetch_array($chem)) 
{ 

echo "<tr>"; 

echo "<td class='content'>" . $row['Consumables.Name'] . "</td>"; 
echo "<td class='content'>" . $row['Consumables.Quantity'] . "</td>"; 
echo "<td class='content'>" . $row['Chemicals.GHS_1'] . "</td>"; 
echo "<td class='content'>" . $row['Chemicals.Formula'] . "</td>"; 
echo "<td class='content'>" . $row['CAS'] . "</td>"; 
echo "</tr>"; 
} 
echo "</table>"; 
} 

回答

1

A1。)加入他們MySQL。 )由於你已經提到它們的公共列被稱爲CAS,所以你應該在ON子句中定義它們,例如,

SELECT a.*, b.* 
FROM Chemicals a 
     INNER JOIN Consumables b 
      ON a.CAS = b.CAS 
WHERE a.Name_Chem1 = '%$item%' 

作爲旁註,如果該值(小號)從外部傳來的查詢與SQL Injection脆弱。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements,你可以擺脫圍繞值使用單引號。