在php中排序和限制两个表查询

时间:2014-02-08 08:54:08

标签: mysql sql join

我正在尝试通过他们的XXX服务评级来排序医院。

我有以下表格

hospital (hid, name)
sratings (Service ratings) (hospitalId, ratingValue, serviceId)
services  (sid, name
hrating (hid, ratingvalue)

服务包含500多项服务。 我也为xx服务提供服务“sid”

例如,如果我选择服务心脏病学,它应该按照分级服务评级排序前50家医院。

什么是正确的查询。 我已经做过的一部分查询,它选择了所有的医院,并为他们分配了从另一张桌子上取得的评分,但现在这是无关紧要的。只想排序并获得服务xx评级的前50家医院

SELECT
    hospital.*, 
    (SELECT AVG(hrating.rating_h) 
       FROM hrating 
       WHERE hrating.hid = hospital.hid) as overall_rating
  FROM hospital 

1 个答案:

答案 0 :(得分:1)

只需加入您的表格,然后对结果进行排序:

SELECT   hospital.*
FROM     hospital
    JOIN sratings ON sratings.hospitalId = hospital.hid
    JOIN services ON services.sid = sratings.serviceId
WHERE    services.name = 'Cardiology'
ORDER BY sratings.ratingValue DESC
LIMIT    50

上述查询假定(hospitalId, serviceId)sratings是唯一的(例如,它是该表的主键)。否则,您必须定义如何对具有同一服务的多个评级的医院进行排序,例如按平均评级:

SELECT   hospital.*
FROM     hospital
    JOIN sratings ON sratings.hospitalId = hospital.hid
    JOIN services ON services.sid = sratings.serviceId
WHERE    services.name = 'Cardiology'
GROUP BY hospital.hid
ORDER BY AVG(sratings.ratingValue) DESC
LIMIT    50