问题描述
|
所以我得到了这个查询,是否可以从avgscore获取MysqL结果?
SELECT * FROM dog_clinic
LEFT JOIN (SELECT AVG(score) AS avgscore,input_id
FROM dog_clinic_score GROUP BY input_id) s ON s.input_id = dog_clinic.id
ORDER BY avgscore DESC,visited DESC LIMIT 0,10
提前致谢
整个声明:
if ($stmt_dog_clinic = $MysqLi->prepare(\"SELECT dog_clinic.id,dog_clinic.name,dog_clinic.content,dog_clinic.city,dog_clinic.street,dog_clinic.picture,dog_clinic.visited,s.avgscore FROM dog_clinic LEFT JOIN (SELECT AVG(score) AS avgscore,input_id FROM dog_clinic_score GROUP BY input_id) s ON s.input_id = dog_clinic.id ORDER BY s.avgscore DESC,dog_clinic.visited DESC LIMIT 0,10\"))
{
$stmt_dog_clinic->bind_result($id,$name,$content,$city,$street,$picture,$visited,$avgscore);
$stmt_dog_clinic->execute();
while ($stmt_dog_clinic->fetch())
{ echo $avgscore; }
$ avgscore dsn不产生任何数据。
解决方法
好的,让我们再进一步...通过左连接,这意味着并非所有的狗诊所都具有“得分”等级...如果是这样,则该值为NULL并可能导致其窒息。
SELECT
dc.*,COALESCE( s.avgscore,0 ) FinalAvg
FROM
dog_clinic dc
LEFT JOIN ( SELECT dcs.input_id,AVG(dcs.score) AS avgscore
FROM
dog_clinic_score dcs
GROUP BY
dcs.input_id) s
ON dc.id = s.input_id
ORDER BY
COALESCE( s.avgscore,0 ) DESC,dc.visited DESC
LIMIT
0,10;
, 您的意思是:
SELECT dog_clinic.*,s.avgscore FROM dog_clinic
LEFT JOIN (SELECT AVG(score) AS avgscore,input_id
FROM dog_clinic_score GROUP BY input_id) s ON s.input_id = dog_clinic.id
ORDER BY s.avgscore DESC,dog_clinic.visited DESC LIMIT 0,10;
我认为Rahul是正确的,它隐含为s.avgscore DESC,dog_clinic.visited DESC
,我也将其集成到查询中。