结合两个SQL查询PHP

时间:2017-10-18 06:56:10

标签: php mysql

感谢您阅读我的问题。我现在已经在这一天工作了一天半,我似乎无法让它发挥作用。我想要做的是组合两个SQL查询。

正确设置了与数据库的连接。这一切都有效。所以我试图合并的查询是:

$sql = "SELECT * FROM pf_postmeta WHERE meta_key = '_wp_attached_file' ";
$result = $conn->query($sql);
foreach ($result as $row) {
        // do my stuff
    }
$conn->close();

并且

$sql = "SELECT * FROM pf_posts WHERE post_type = 'cases' ";
$result = $conn->query($sql);
foreach ($result as $row) {
        // do my stuff
    }
$conn->close();

现在我已经阅读了JOINUNION,但我无法让这两个查询一起工作。

我尝试使用UNION ALL无济于事。

$sql = "SELECT *FROM pf_postmeta WHERE meta_key = '_wp_attached_file'
        UNION ALL
        SELECT *FROM pf_posts WHERE post_type = 'cases'";
$result = $conn->query($sql);
foreach ($result as $row) {
        // do stuff
    }
$conn->close();

这并没有显示任何内容。

根据要求更新:如果我删除UNION ALL SELECT部分我的查询有效。如果我在MySQLWorkbench中运行此代码,则说出

09:07:30 SELECT * FROM deb100651n2_pf.pf_posts WHERE post_type='cases' UNION ALL SELECT * FROM deb100651n2_pf.pf_postmeta WHERE meta_key = '_wp_attached_file' Error Code: 1222. The used SELECT statements have a different number of columns 0.050 sec

有没有人有我的解决方案?在过去的一天中,这一直困扰着我......

(注意:我对整个SQL事情都很陌生,所以请保持温和......)

再次感谢您的时间......

3 个答案:

答案 0 :(得分:3)

要执行“联合查询”列数必须匹配加上,每列的数据类型必须兼容(例如,第一个查询的第3列是十进制,第二个查询的第3列是整数。如果列数不同,或者任何列的类型不兼容,则查询将产生SQL错误。

因此。这是在任何生产代码中停止使用 select *的一个非常好的理由。您必须指定列名称,确保两个选择列表具有相同的列数,并且这些列是兼容的。

答案 1 :(得分:1)

到目前为止,我从您上面所述的内容中猜到,您的联合查询中可能存在列未命中匹配问题。在使用union运算符时,您必须记住三件事 -

  • UNION中的每个SELECT语句必须具有相同的列数
  • 列也必须具有类似的数据类型
  • 每个SELECT语句中的列也必须采用相同的顺序

因此,如果您对两个表执行SELECT * ..操作,那么您的pf_postmetapf_post表必须具有相同数量的具有相似数据类型和排序的列。您可以尝试SELECT id from pf_postmeta UNION ALL SELECT id from pf_post清除您的概念,假设两个表都有id列,联合的工作原理。

答案 2 :(得分:-4)

为什么这么复杂使它变得简单。试试吧:

SELECT *  FROM pf_postmeta 
WHERE meta_key = '_wp_attached_file'
UNION
SELECT * FROM pf_posts
WHERE post_type = 'cases'