如何在PHP和&中结合2个表? MySQL的?

时间:2017-05-11 11:45:23

标签: php mysql sql database

我想'联合所有'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,我们的表必须具有相同的列号。

1 个答案:

答案 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'