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

时间:2012-04-27 21:50:16

标签: php mysql

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

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

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

Using UNION to find references from other tables

这是我的代码:

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 =)

3 个答案:

答案 0 :(得分:2)

您可能应该有第四个表Parts,用于标识每个part_num已分配到哪个类型表。然而,如果没有这个,你仍然可以得到你所追求的外连接(虽然浪费):

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

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

答案 1 :(得分:1)

如何不是所有列,而只是标题等?

$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库。

希望它会有所帮助。

答案 2 :(得分:0)

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