我有三个表:适配器、连接器、组件
我需要能够搜索它们以找到相应的部件号 (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 个查询中每个查询的数据。