感谢您阅读我的问题。我现在已经在这一天工作了一天半,我似乎无法让它发挥作用。我想要做的是组合两个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();
现在我已经阅读了JOIN
和UNION
,但我无法让这两个查询一起工作。
我尝试使用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事情都很陌生,所以请保持温和......)
再次感谢您的时间......
答案 0 :(得分:3)
要执行“联合查询”列数必须匹配:加上,每列的数据类型必须兼容(例如,第一个查询的第3列是十进制,第二个查询的第3列是整数。如果列数不同,或者任何列的类型不兼容,则查询将产生SQL错误。
因此。这是在任何生产代码中停止使用 select *
的一个非常好的理由。您必须指定列名称,确保两个选择列表具有相同的列数,并且这些列是兼容的。
答案 1 :(得分:1)
到目前为止,我从您上面所述的内容中猜到,您的联合查询中可能存在列未命中匹配问题。在使用union
运算符时,您必须记住三件事 -
SELECT
语句必须具有相同的列数SELECT
语句中的列也必须采用相同的顺序因此,如果您对两个表执行SELECT * ..
操作,那么您的pf_postmeta
和pf_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'