2013-01-13 60 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,你可以摆脱围绕值使用单引号。