我想'联合所有'2桌。因此,我编写了以下代码:
$query = "SELECT * FROM (SELECT * FROM news WHERE site_id = '1'
UNION ALL
SELECT * FROM all_news)
ORDER BY date DESC";
$news = mysqli_query($con, $query);
while($new = mysqli_fetch_object($news))
{
echo '- ' . $new->baslik . '<br>';
}
然而,我得到了这样的错误:
警告:mysqli_fetch_object()需要参数1 mysqli_result,在/../XAMPP/../../../index.php中给出的布尔值在线 19
第19行是一行......
我该如何解决?我想结合2个表,按日期排序所有限制10 ...
修改
新闻表:
id | site_id | title | date (timestamp)
all_news表:
id | title | date (timestamp)
修改 问题解决了。我了解到,如果我们想使用union或union all,我们的表必须具有相同的列号。
答案 0 :(得分:0)
要合并这两个表,您必须在较短表的查询中添加一个额外的虚拟列,以便满足UNION的规则。
您无需在该表的架构中添加真实的列!
所以如果表是
新闻表:
id | site_id | title | date (timestamp)
all_news表:
id | title | date (timestamp)
然后可以像这样写
SELECT id, site_id, title, date FROM news WHERE site_id = '1'
UNION ALL
SELECT id, 0, title, date FROM all_news
注意我在all_news
表的选择列表中添加了一个虚拟列,以便列数和每列的数据类型相互匹配。
您可以使用除0
以外的任何您喜欢的号码,因此请选择一个标识此号码的号码作为您不想处理的数据,或者可以通过设置一个来标识来自all_news
的行。具体价值。
注意:我认为site_id
是一个整数,如果是文本,则使用'0'
或'IGNORE ME'
。