php - 从第二个表返回搜索结果

标签 php mysql sql select

我有两个表,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/

相关文章:

php - json_encode 解析时添加双引号

php - Laravel 9.x 目标类在登录应用程序时不存在错误

php mysql 连接三个表并对相同id的项求和

sql - 如何在 postgres 9.5 中正确执行 upsert

sql - rails : Order by sum of two columns

php - POINT 类型 MySQL 数据类型的 Codeigniter update_batch?

php - 使用 HTML/PHP 创建了一个插入论坛,但在添加一定量的内容时出现错误

mysql - 不再支持使用旧密码进行身份验证

mysql - 如何在MySQL中创建使用字符串和数字自动递增的列数据?

mysql - SQL - 最小函数