Среднее и сравнительное левое соединение MySQL

Я пытаюсь получить информацию из 2 разных таблиц MySQL.

Основная таблица такая:

первичная таблица sql

Из этого я использую информацию, чтобы получить среднюю ставку из этого:

таблица рейтинга sql

Как я могу написать запрос 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>";
}
}

Однако я не получаю вывод?

0

Решение

Ниже запроса должны возвращаться дома, отсортированные по средним рейтингам:

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
0

Другие решения

Для производительности используйте 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
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector