我有三个表:适配器,连接器,组件
我需要能够搜索所有内容以找到相应的部件号(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 =)
答案 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个查询中的每个查询的数据。