2014-02-08 30 views
-1

我試圖按照他們的XXX服務的等級對醫院進行功能排序。排序和限制php中的兩個表查詢

我有以下各表

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

服務包含500多個服務。 我也有服務「sid」爲xx服務

例如,如果我選擇了服務心臟病學,它應該得到按服務評級排序的前50家醫院。

什麼是正確的查詢。 查詢的一部分,我已經做了,選擇所有的醫院,並將他們的評級從另一個表中盤點,但現在是無稽之談。只是要排序並獲得第50家醫院通過服務XX額定

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

爲什麼downvote? –

+1

有趣的事情:你正在從'hratings'中選擇一些東西,但那個並不在你的表格列表中... –

+0

爲什麼使用php標籤? – Mark

回答

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 
+0

同意,並且只是注意到你沒有「修復」該子查詢並將其改爲連接,但是簡單卻沒有把它包括在你的答案中。刪除評論,保持評級,但很好的答案。 –