Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 左连接MYSQL返回false_Php_Mysql_Left Join - Fatal编程技术网

Php 左连接MYSQL返回false

Php 左连接MYSQL返回false,php,mysql,left-join,Php,Mysql,Left Join,我正在尝试执行MYSQL左连接查询,但遇到一个错误: 警告:mysqli_num_rows()要求参数1为mysqli_结果,布尔值在中给出。因为返回的查询为false 代码是: $query = " SELECT a.page , SUM(b.views) views , ROUND(SUM(b.costs)/1.38,2) costs , ROUND(SUM(a.amount),2) REV , ROUND(SUM(a.amount) - SUM(b.

我正在尝试执行MYSQL左连接查询,但遇到一个错误: 警告:mysqli_num_rows()要求参数1为mysqli_结果,布尔值在中给出。因为返回的查询为false

代码是:

$query = "
SELECT a.page
     , SUM(b.views) views
     , ROUND(SUM(b.costs)/1.38,2) costs
     , ROUND(SUM(a.amount),2) REV
     , ROUND(SUM(a.amount) - SUM(b.costs)/1.38,2) PNL  
  FROM revenues a 
  LEFT 
  JOIN costs b 
    ON a.page = b.page
 WHERE a.date BETWEEN '$start_date' AND '$end_date' 
   AND a.country = '$country' 
   AND b.date BETWEEN '$start_date' AND '$end_date' 
 GROUP 
    BY a.page";

$result = mysqli_query($connection,$query);

if ($result != false) {
  $foundnum = mysqli_num_rows($result);
  if ($foundnum == 0) {
    echo 'No results found.';
  }
} else {
    echo 'returned false';
}

printQuery($result);
printQuery是me的一个函数,它创建一个html表

如果我对表进行两次单独的查询,我会得到正确的表。我分别提出以下问题:

$query = "SELECT page, round(sum(amount),2) as REV FROM revenues WHERE date between '$start_date' AND '$end_date' AND country = '$country' GROUP BY page" ;

$query2 = "SELECT page, sum(views) as views, round(sum(costs)/1.38,2) as costs FROM costs WHERE date between '$start_date' AND '$end_date' GROUP BY page";
有人能告诉我错误在哪里吗

表收入由以下列组成: 日期:日期 金额:浮动(如果没有收入,则为空) 国家:瓦查尔

表1列的成本余弦列表: 日期:日期 成本:浮动(始终>=0) 视图:int


谢谢

以下是usless:

else {
    echo 'returned false';
}
将其替换为以下内容:

else {
    echo "Query failed.\nMySQLi error: " . mysqli_error();
}

您至少可以通过检查返回值获得分数,但至少出于开发目的,您需要让代码以描述性方式失败。

您可以发布查询的vardump()吗:vardump($query);您是否尝试过执行echo mysqli_error();若要查看sql查询中是否存在使mysqli_query()返回false的错误,请使用“$result=mysqli_query($connection,$query)或die(mysqli_error($connection));”
WHERE
子句中
b
上的谓词否定左连接操作的“外部性”,使其等效于内部连接。为了使其成为外部联接,可以将要求
b
中的列为非null的谓词重新定位到ON子句中。但这并不能解释这个错误。对于调试,添加
echo$query
echo mysqli_error()
回显错误。我看不出有语法问题。