объединить 2 sql запрос местоположения и средний рейтинг

0

Как я могу объединить эти два sql-запроса по одному запросу?

$query2 ="select raiting.rated_user,avg(raiting.rate) as 'avg_rating' from raiting,users  where
raiting.rated_user=user_id  group by raiting.rated_user order by avg(raiting.rate) desc";

$query      = "SELECT 'user_id','name','email','degree','avatar','mobile','sex','nationality','nationalitycode','birthday_year','pr_hour','spicality','city','online','intro', (SQRT(POW((lat - $lat), 2) + POW((lang - $lang), 2)) * $multiplier) AS distance FROM users  WHERE POW((lat - $lat), 2) + POW((lang - $lang), 2) < POW(($distance / $multiplier), 2) ORDER BY distance";
Теги:

2 ответа

1

Используйте первый в качестве подзапроса во втором:

$query = "
 SELECT
      'user_id','name','email','degree','avatar','mobile'
      ,'sex','nationality','nationalitycode','birthday_year','pr_hour'
      ,'spicality','city','online'
      ,'intro'
      , (SQRT(POW((lat - $lat), 2) + POW((lang - $lang), 2)) * $multiplier) AS distance 
      , r.'avg_rating'
 FROM users 
 INNER JOIN (
      select
            raiting.rated_user
           ,avg(raiting.rate) as 'avg_rating' 
      from raiting
      group by raiting.rated_user 
      ) AS r  on users.user_id  = raiting.rated_user
 WHERE POW((lat - $lat), 2) + POW((lang - $lang), 2) < POW(($distance / $multiplier), 2) 
 ORDER BY distance
";

SQL-запросы могут быть распределены по нескольким строкам, упростить их поддержку

Примите меры предосторожности, чтобы избежать инъекции SQL

0

Вы можете попробовать это также:

$query = "SELECT 'user_id','name','email','degree','avatar', 'mobile','sex','nationality', 'nationalitycode','birthday_year','pr_hour',
'spicality','city','online','intro',t1.rated_user,t1.avg_rating
(SQRT(POW((lat - $lat), 2) + POW((lang - $lang), 2)) * $multiplier) AS distance 
FROM users inner join (select raiting.rated_user,avg(raiting.rate) as 'avg_rating' from raiting 
group by raiting.rated_user 
order by avg(raiting.rate) desc) t1 on users.user_id = t1.rated_user
WHERE POW((lat - $lat), 2) + POW((lang - $lang), 2) < POW(($distance / $multiplier), 2) 
ORDER BY distance";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню