3

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

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

我发现我应该使用 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 =)

4

3 回答 3

2

您可能应该有第四个表,用于标识每个表已分配Parts到哪种类型的表。part_num但是,没有它,您仍然可以通过外部连接获得您想要的东西(虽然很浪费):

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

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

于 2012-04-27T21:58:11.820 回答
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'";

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

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

希望它会有所帮助。

于 2012-04-27T22:09:40.077 回答
0

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

于 2012-04-27T21:56:32.713 回答