我正在尝试加入或联合两个结构不同的表的结果,按照它们的公共pubdate列排序,但收到错误消息:
"使用的SELECT语句具有不同数量的列"
$sql = "
SELECT * FROM news WHERE published='1' AND image!='' AND featured='1'
JOIN
SELECT * FROM videos WHERE published='1'
ORDER BY pubdate DESC
";
$query = mysqli_query($connection, $sql);
while($row = mysqli_fetch_array($query)){
$posttype = $row["posttype"];
$pubdate = $row["pubdate"];
if ($posttype == 'news'){
$content = $row["content"];
$image = $row["image"];
} // end if posttype
if ($posttype == 'videos'){
$description = $row["description"];
} // end if posttype
...
echo ....
} // end while
如何编辑我的查询以便我可以运行我的fetch数组并在之后检索相应的行(然后在两个表共享的另一个公共行上决定要提取的行?)
答案 0 :(得分:0)
由于您未提供样本数据,我们无法建议您正确使用的方式和方式,但我注意到:
使用JOIN语法不正确。应该像:
SELECT *
FROM tbl1 t1
INNER JOIN tbl2 t2 ON t1.Id = t2.Id
如果要使用UNION - 列的顺序和列数应在两个表中匹配,因此您必须在以下两个表中提供列名:
SELECT Col1, Col2, Coln
FROM tbl1
UNION
SELECT Col1, Col2, Coln
FROM tbl2
答案 1 :(得分:0)
通过在选择列表中添加缺少的列,您可以UNION ALL
具有不同列数的表。我的意思是,假设你有:
SQL> create table one ( c1 integer , c2 integer, c3 integer ) ;
SQL> create table two ( c1 integer , c2 integer ) ;
以下UNION ALL
无效:
SQL> select * from one union all select * from two ;
[mysqld-5.5.27]The used SELECT statements have a different number of columns
但是这个还可以:
SQL> select * from one union all select *, null from two ;
注意我们为表two
上的缺失(c3)列添加了NULL。你可以添加你想要的任何东西......