【问题标题】:UNION SQL Issue [duplicate]UNION SQL问题[重复]
【发布时间】:2012-03-05 16:16:40
【问题描述】:

我最近注意到了 UNION 函数,在 W3Schools 上看到你可以合并两个表,但我想合并三个......我已经编写了一段代码,但是它不起作用,因为我得到一个错误。是否可以合并三个表,我该如何实现?谢谢!

错误:

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\wamp\www\Legendary\new\search.php on line 54

代码:

            // Fill up array with names
            $sql2 = mysql_query("SELECT * FROM members UNION ALL SELECT * FROM clans UNION ALL SELECT * FROM tournaments"); 
            while($row=mysql_fetch_array($sql2)) {
                $a[]=$row['name'];
                $b[]=$row['id'];
            }

【问题讨论】:

  • if($sql2 === FALSE){die(mysql_error())}
  • 我很确定你想加入这些表而不是联合它们。另外,把你在 W3Schools 上读到的任何东西都带上一大粒盐:http://w3fools.com/
  • Joe Stefanelli,我会试试的,谢谢!
  • W3Schools 页面在它的第 2 段中说:“请注意,UNION 中的每个 SELECT 语句必须具有相同数量的列。列也必须具有相似的数据类型。此外,每个 SELECT 中的列声明的顺序必须相同。”关于数据类型,这个陈述可能有争议,但无论如何你都应该遵循它。
  • 不要将 W3SCHOOLS 视为资源。

标签: php mysql sql union union-all


【解决方案1】:

您需要从每个表中以相同的顺序返回相同数量的列和数据类型(因为mySQL 不支持 SQL 标准的UNION CORRESPONDING 语法)。如果表不完全匹配,但确实有一些您想要UNION 的类似列,那么在SELECT 子句中为UNION 的每个部分仅指定这些列。

即使表模式匹配,最好指定列名;否则将来向其中一个表添加一列会破坏查询。

例如,如果所有表都有一个名称列,您可以这样做:

select Name from members
UNION ALL
select Name from clans
UNION ALL
select Name from tournaments

【讨论】:

  • 澄清一下:您需要拥有相同数量的列。您应该拥有相同的类型。 (后一个规则是灵活的。前一个不是。)
【解决方案2】:

UNION 是一个 SQL 命令,用于在其他结果之上STACK结果,这就是为什么您需要相同数量的列的原因。如果您想查看某些成员参加了哪些氏族和锦标赛,那么您需要加入他们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多