Php 平均和比较左连接MySQL
我试图从两个不同的MySQL表中获取信息 主表如下所示: 从这一条中,我使用这些信息来获得平均速率: 我如何编写一个SQL查询,通过计算所有具有Php 平均和比较左连接MySQL,php,mysql,sql,average,Php,Mysql,Sql,Average,我试图从两个不同的MySQL表中获取信息 主表如下所示: 从这一条中,我使用这些信息来获得平均速率: 我如何编写一个SQL查询,通过计算所有具有评级\u house=house\u id的行,并按最高评级排序,如果评级相等,则按最高评级排序 这就是我自己的想法: $sql = "SELECT l.location_address, " . "r.rating_structure+r.rating_inventory+r.rating_service/3 AS aver
评级\u house=house\u id
的行,并按最高评级排序,如果评级相等,则按最高评级排序
这就是我自己的想法:
$sql = "SELECT l.location_address, "
. "r.rating_structure+r.rating_inventory+r.rating_service/3 AS average "
. "FROM houses h "
. "LEFT JOIN rating r ON h.house_id = r.rating_house "
. "LEFT JOIN location l ON h.house_address = l.location_id "
. "WHERE h.house_deleted IS NULL SORT BY average DESC LIMIT 10";
$result = $db_connect->prepare($sql);
if($result->execute()){
while($user_data = $result->fetch(PDO::FETCH_ASSOC)){
$user_data['location_address']."<br>";
}
}
$sql=“选择l.location\u地址,”
. “r.评级结构+r.评级库存+r.评级服务/3作为平均值”
. “来自h”
. “h.house_id上的左连接额定值r=r.rating_house”
. “h.house\u address=l.location\u id上的左连接位置l”
. “其中h.house_deleted为空,按平均DESC LIMIT 10排序”;
$result=$db_connect->prepare($sql);
如果($result->execute()){
而($user_data=$result->fetch(PDO::fetch_ASSOC)){
$user_data['location_address']。“
”;
}
}
但是我没有得到任何输出?为了提高性能,如果您知道相关行必须存在,请使用内部联接而不是左联接
SELECT l.location_address,
(SUM(r.rating_structure)+SUM(r.rating_inventory)+SUM(r.rating_service))/3 AS average
FROM houses h
INNER JOIN rating r ON h.house_id = r.rating_house
INNER JOIN location l ON h.house_address = l.location_id
WHERE h.house_deleted IS NULL
GROUP BY l.location_address
ORDER BY 2,
(SUM(r.rating_structure)+SUM(r.rating_inventory)+SUM(r.rating_service)) DESC
LIMIT 10
以下查询应返回按平均评级排序的房屋:
select h.house_id, (sum(hr.rating_structure) + sum(rating_inventory) + sum(rating_service))/3 as "average"
from house h left outer join house_rating hr on h.house_id = hr.rating_house
group by h.house_id
order by average
请注意,MySQL(以及我所知道的所有SQL方言,包括ANSI标准)中用于排序结果的关键字是
orderby
,而不是sortby
。是否有一种方法可以实现,以便在没有给出评级的情况下,它仍会显示?但在底部,如果没有评级存储为空,那么它们的平均值应该返回为空。如果这不起作用,将r.rating_结构和其他结构包装在IFNULL中(r.rating_结构,0)。通过这种方式,空值被平均为零,并将显示在底部。很好,谢谢:)此外,我可以让它正确计数,以便在速率相等时进行分割。你刚刚更新了吗?马特,所有评级都设置好了,但是如果没有评级条目呢?