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