尝试使用UNION ALL查询两个表时出错

时间:2011-12-12 11:53:32

标签: php mysql union multiple-tables

我正在尝试从数据库中的两个表中查询单个结果。这是我的代码:

$pageid = mysql_real_escape_string($_GET['id']);
$query = sprintf("(SELECT * FROM classifieds WHERE pageid = '$pageid' LIMIT 1)
UNION ALL
(SELECT * FROM resumes WHERE pageid = '$pageid' LIMIT 1)");
$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {
    echo $row['title'] . "<br/>";
    }

pageid是一个网址变量。此代码尝试使用该变量,使用它查询数据库,并返回结果。我收到这个错误:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

在这里撞墙。无法弄清楚为什么这个错误不断发生。任何帮助==谢谢。

3 个答案:

答案 0 :(得分:1)

使用UNION列数和列类型时,两个查询必须相同。

现在,当您查询两个不同的表时,我想可以安全地假设列数不同或相应的列类型不匹配。

尝试使用类似的东西

select col1, col2 from classifieds.......
Union All
select col1, col2

但同样,数字和相应的列类型应该相同。

答案 1 :(得分:0)

直接执行查询并查看是否返回任何行。顺便说一下,sprintf的用途是什么?

答案 2 :(得分:0)

将此错误处理添加到您的代码中:

$result = mysql_query($query);
if (!$result) {
    die('Invalid query: ' . mysql_error());
}

执行查询失败,结果$result设置为false,这不是有效的MySQL结果资源,因而是错误。

问题的原因可能是两个表的列数不等。 UNION ALL期望其子查询返回相同数量的列。