Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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 当我与另一个表联接时,在查询中发现错误_Php_Mysql_Sql_Laravel_Model View Controller - Fatal编程技术网

Php 当我与另一个表联接时,在查询中发现错误

Php 当我与另一个表联接时,在查询中发现错误,php,mysql,sql,laravel,model-view-controller,Php,Mysql,Sql,Laravel,Model View Controller,当我将一个表连接到另一个表时,我得到了这个错误。我把关键字,但它不工作,它给我的错误,如字段未找到我如何才能解决这个错误 代码: 错误: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ratings_average' in 'where clause' (SQL: select `products`.*, AVG(rating) as ratings_average from `products` left join `revie

当我将一个表连接到另一个表时,我得到了这个错误。我把关键字,但它不工作,它给我的错误,如字段未找到我如何才能解决这个错误

代码:

错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'ratings_average' in 'where clause' (SQL: select `products`.*, AVG(rating) as ratings_average from `products` left join `reviews` on `products`.`id` = `reviews`.`productID` where (`categoryID` in (9, 11, 31) and `productSellingPrice` between 50 and 5000 and `ratings_average` between 1 and 2) group by `products`.`id`)

您可以找到
$minRating
maxrrating
而不是评级数组。通过这两个值,可以按如下方式运行查询:

$query->whereBetween('rating',[$minRating,$maxRtaing]);
select `products`.*, AVG(`ratings`.`rating`) as ratings_average
    where `products`.`id` = `reviews`.`productId`
    group by `products`.`id`
    having (`categoryID` in (9, 11, 31) and `productSellingPrice` between 50 and 5000
        and `ratings_average` between 1 and 2)

您可以找到
$minRating
maxrrating
而不是评级数组。通过这两个值,可以按如下方式运行查询:

$query->whereBetween('rating',[$minRating,$maxRtaing]);
select `products`.*, AVG(`ratings`.`rating`) as ratings_average
    where `products`.`id` = `reviews`.`productId`
    group by `products`.`id`
    having (`categoryID` in (9, 11, 31) and `productSellingPrice` between 50 and 5000
        and `ratings_average` between 1 and 2)

这是一个SQL问题,它与作用域有关。我不太熟悉laravel的API,但生成的SQL(基于您有用的错误消息)是:

问题是,
评级\u平均值
计算列属于
分组依据
范围。引用该列的唯一方法是在
HAVING
语句中。您的SQL语句如下所示:

$query->whereBetween('rating',[$minRating,$maxRtaing]);
select `products`.*, AVG(`ratings`.`rating`) as ratings_average
    where `products`.`id` = `reviews`.`productId`
    group by `products`.`id`
    having (`categoryID` in (9, 11, 31) and `productSellingPrice` between 50 and 5000
        and `ratings_average` between 1 and 2)

从技术上讲,上面having语句中的前两个子句可能位于您的
WHERE
子句中,但是
ratings\u average
命名列只能在
having
子句中引用。WHERE和have都会限制您的结果,但have会在分组后进行评估。

该问题是一个SQL问题,它与作用域有关。我不太熟悉laravel的API,但生成的SQL(基于您有用的错误消息)是:

问题是,
评级\u平均值
计算列属于
分组依据
范围。引用该列的唯一方法是在
HAVING
语句中。您的SQL语句如下所示:

$query->whereBetween('rating',[$minRating,$maxRtaing]);
select `products`.*, AVG(`ratings`.`rating`) as ratings_average
    where `products`.`id` = `reviews`.`productId`
    group by `products`.`id`
    having (`categoryID` in (9, 11, 31) and `productSellingPrice` between 50 and 5000
        and `ratings_average` between 1 and 2)


从技术上讲,上面having语句中的前两个子句可能位于您的
WHERE
子句中,但是
ratings\u average
命名列只能在
having
子句中引用。WHERE和have都限制了您的结果,但have是在分组后进行评估的。

您的表是否有一个名为
ratings\u average
的列?我使用DB::raw('AVG(rating))作为ratings_average'@TZHXsorry,我无法理解您@tzhxy您没有一个同名的列,因此您不能将其包含在条件中。这是基本的MySQL。只需检查我的查询,我将其用作average@tzhxd的关键字。您的表是否有一个名为
ratings_average
的列?我使用DB::raw('AVG(评级)作为ratings_average'@TZHXsorry,我无法理解您@tzhxy您没有同名的列,因此您不能将其包含在条件中。这是基本的MySQL。只需检查我作为average@TZHXuse关键字使用的查询即可使用此
$query->whereBetween('ratings'),$ratingArray)
不确定您是否需要在平均值上打勾,但其他所有内容都在您的问题上打勾@ektasingh@ektasingh我编辑了我的答案。让我们看看它是否有帮助。事实上,它没有找到评级字段。它在评级字段上给了我错误,因为
ratings\u average
字段在您的表中不存在。您必须运行所有查询ries使用
rating
。此
AVG(rating)作为ratings\u average
将在返回查询结果时仅将字段名视为
rating\u average
。使用此
$query->where-between('rating`'),$ratingArray)
不确定您是否需要在平均值上打勾,但其他所有内容都在您的问题上打勾@ektasingh@ektasingh我编辑了我的答案。让我们看看它是否有帮助。事实上,它没有找到评级字段。它在评级字段上给了我错误,因为
ratings\u average
字段在您的表中不存在。您必须运行所有查询ries使用
rating
。此
AVG(rating)作为ratings\u average
将在返回查询结果时仅将字段名视为
rating\u average
。如果使用have,然后在grammar.php中找到strtolower()的错误,如何解决问题期望参数1为字符串,对象givenI无法回答API特定的问题,只能回答需要生成的SQL。正如我在回答中提到的,我对laravel的API不太熟悉。如果我使用have,那么我在grammer.php中发现strtolower()的错误,我该如何解决我的问题期望参数1是字符串,对象givenI无法回答API特定的问题,只能回答需要生成的SQL。正如我在回答中提到的,我对laravel的API不太熟悉。