Я пытаюсь получить информацию из 2 разных таблиц MySQL.
Основная таблица такая:
Из этого я использую информацию, чтобы получить среднюю ставку из этого:
Как я могу написать запрос SQL, который получит мне average
рейтинг путем подсчета всех строк с rating_house = house_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>";
}
}
Однако я не получаю вывод?
Ниже запроса должны возвращаться дома, отсортированные по средним рейтингам:
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
Для производительности используйте INNER JOIN вместо LEFT JOIN, если вы знаете, что связанные строки должны существовать.
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