我有两个表,Chemicals & Consumables。 “化学品”存储有关化学品的所有一般信息(配方、安全性等),“消耗品”存储有关库存和各个房间位置等的信息。 公共(public)字段是“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>";
}
最佳答案
A1.) 加入他们 MySQL
。
A2.) 由于您提到它们的公共(public)列称为CAS
,因此您应该在ON
子句中定义它们,例如。
SELECT a.*, b.*
FROM Chemicals a
INNER JOIN Consumables b
ON a.CAS = b.CAS
WHERE a.Name_Chem1 = '%$item%'
作为旁注,如果值 (s) 来自外部,则查询容易受到 SQL 注入(inject)
的攻击。请查看下面的文章,了解如何预防它。通过使用 PreparedStatements,您可以摆脱在值周围使用单引号。
关于php - 从第二个表返回搜索结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14304202/