如何搜索多个 mySQL 表以查找一个特定行


How do I search multiple mySQL tables to find one specific row?

我有三个表:适配器、连接器、组件
我需要能够搜索它们以找到相应的部件号 (part_num)
部件号是唯一的,所以我不必担心多个条目。

我使用 GET 在 URL 中查找部件号,将其设置为 $num,然后执行

发现我应该使用 UNION,但是这三个表有不同的列,并且在尝试进行选择时会给我一个错误。 在下面的示例中

使用 UNION 从其他表中查找引用

这是我的代码:

if(isset($_GET['num'])) {
$num = $_GET['num'];
$result = mysql_query("SELECT * FROM connectors WHERE part_num = '$num' UNION SELECT * FROM adapters WHERE part_num = '$num' UNION SELECT * FROM components WHERE part_num = '$num'"); }

任何帮助将不胜感激,所以提前感谢SO =)

您可能应该有第四个表Parts,用于标识每个part_num已分配给哪个类型的表。 但是,如果没有它,您仍然可以通过外部连接获得您所追求的东西(尽管很浪费):

SELECT * FROM
             connectors
   LEFT JOIN adapters   USING(part_num)
   LEFT JOIN components USING(part_num)
WHERE
   part_num = ?

请注意,我使用了?,因为您确实应该使用预准备语句:如果您不知道为什么或它们是什么,请阅读Bobby Tables。

不是所有列,而是只取标题等怎么样?

$sSql = "SELECT id, title, 1 FROM connectors WHERE part_num = '$num' 
UNION 
SELECT id, title, 2 FROM adapters WHERE part_num = '$num' 
UNION 
SELECT id, title, 3 FROM components WHERE part_num = '$num'";

您必须将其用于表字段,但是使用此逻辑,您将拥有一个数组,在该数组中,通过第三列(在我的示例中),您可以知道它是否找到了连接器,适配器或组件,然后生成适当的链接或对此数据执行其他操作。

另一种方法是进行 Multi 查询,这将通过一个数据库请求返回多个结果。有一些方法可以使用它 - 使用mysqli(http://lt.php.net/manual/en/mysqli.multi-query.php)或一些Adodb或PDO库。

希望它会有所帮助。

若要使用 UNION,3 个记录集必须具有相同数量的列,因此您必须指定每个表中所需的列。 从那里,你将有一个结果集,其中包含来自 3 个查询中每个查询的数据。