Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.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 选择查询返回1个结果,而不是3个结果,因为平均值_Php_Mysql_Average - Fatal编程技术网

Php 选择查询返回1个结果,而不是3个结果,因为平均值

Php 选择查询返回1个结果,而不是3个结果,因为平均值,php,mysql,average,Php,Mysql,Average,下面的select查询在应该为3时返回1行。我很确定这是因为AVGk.sumtotal字段 如果我重写查询并取出AVGk.sumtotal列,并将FROM inv_ratings取为k,则得到我的3行 我不明白为什么这个表inv_ratings或这个AVGk.sumtottal列将行数限制为1。我在网上搜索了几个小时,试图找到关于使用AVG条款返回结果的信息,但没有找到多少。我是否必须使用GROUPBY子句,我尝试过,但只得到了错误 $p = "SELECT i.invention_id, i.

下面的select查询在应该为3时返回1行。我很确定这是因为AVGk.sumtotal字段

如果我重写查询并取出AVGk.sumtotal列,并将FROM inv_ratings取为k,则得到我的3行

我不明白为什么这个表inv_ratings或这个AVGk.sumtottal列将行数限制为1。我在网上搜索了几个小时,试图找到关于使用AVG条款返回结果的信息,但没有找到多少。我是否必须使用GROUPBY子句,我尝试过,但只得到了错误

$p = "SELECT i.invention_id, i.inv_title, i.date_submitted, i.category_id,"
    . " i.approved, c.category_id, c.category, u.image_name, AVG(k.sumtotal)"
    . " FROM inv_ratings AS k INNER JOIN inventions AS i USING (invention_id)"
    . " INNER JOIN categories AS c USING (category_id)"
    . " INNER JOIN images AS u USING (invention_id)"
    . " WHERE c.category_id = $cat AND i.approved = 'approved'"
    . " HAVING u.image_name < 2"
    . " ORDER BY date_submitted"
    . " DESC LIMIT $start, $display";

$q = mysqli_query($dbc, $p) or trigger_error("Query: $p\n<br />mysqli Error: " . mysqli_error($dbc));

您遇到了MySQL的一个难题:

我讨厌MySQL允许这种语法,因为它只会引起混乱。但您可能希望使用MySQL的黑客行为,请注意,如果除invention_id或sumtotal之外的任何字段都有多个值,那么您将从该列中获得一个随机值:

$p = "SELECT i.invention_id, i.inv_title, i.date_submitted, i.category_id,"
. " i.approved, c.category_id, c.category, u.image_name, AVG(k.sumtotal)"
. " FROM inv_ratings AS k INNER JOIN inventions AS i USING (invention_id)"
. " INNER JOIN categories AS c USING (category_id)"
. " INNER JOIN images AS u USING (invention_id)"
. " WHERE c.category_id = $cat AND i.approved = 'approved'"
. " GROUP BY i.invention_id "
. " HAVING u.image_name < 2"
. " ORDER BY date_submitted"
. " DESC LIMIT $start, $display";
或者,为了不使用MySQL的黑客行为:

$p = "SELECT i.invention_id, i.inv_title, i.date_submitted, i.category_id,"
. " i.approved, c.category_id, c.category, u.image_name, AVG(k.sumtotal)"
. " FROM inv_ratings AS k INNER JOIN inventions AS i USING (invention_id)"
. " INNER JOIN categories AS c USING (category_id)"
. " INNER JOIN images AS u USING (invention_id)"
. " WHERE c.category_id = $cat AND i.approved = 'approved'"
. " GROUP BY i.invention_id, i.inv_title, i.date_submitted, i.category_id,"
. " i.approved, c.category_id, c.category, u.image_name "
. " HAVING u.image_name < 2"
. " ORDER BY date_submitted"
. " DESC LIMIT $start, $display";

你需要添加一个GROUP BY子句。你是希望每个部分都有一个平均值,还是希望每一行都有一个唯一的平均值?你能帮我表达一下吗?我试了无数次想让它起作用,但它不起作用。我希望每个发明的所有评分的平均值。GROUP BY应该在where之后。