2017-12-17 1 views
0

Wie kann ich diese zwei SQL-Abfragen für eine Abfrage zusammenführen?Merge 2 SQL-Abfrage Standort und durchschnittliche Bewertung

$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"; 
+1

MySQL oder SQL Server? – Sami

+0

Sorry seine MySQL-Abfrage – user3676648

Antwort

1

Verwenden Sie die erste als Unterabfrage in der zweiten:

$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-Abfragen mehrere Zeilen verteilt werden kann, macht es viel einfacher

Ergreifen Sie Vorsichtsmaßnahmen zu halten Um SQL-Injektion zu vermeiden

0

Sie können dies auch versuchen:

$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";