如何在一个查询中合并这两个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";
答案 0 :(得分: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注入
答案 1 :(得分: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";