从第二个表返回搜索结果

时间:2013-01-13 14:01:45

标签: php mysql sql select

我有两张桌子,化学品和耗材。 “化学品”存储有关化学品(配方,安全等)的所有一般信息,“消耗品”存储有关库存和信息的信息。在各个房间等的位置 常见字段是“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 个答案:

答案 0 :(得分:1)

A1。)加入他们MySQL

A2。)由于您已经提到他们的公共列被称为CAS,您应该在ON子句中定义它们,例如。

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

作为旁注,如果值( s )来自外部,则查询容易被SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。