2011-09-23 41 views
0

使用排名算法,但我不滿意多個數據庫調用和數據迴轉,我不得不通過計算特定項目的排名,將其輸出到數組,然後按排名值排序。是否有可能在MySQL中根據其他表中找到的數據計算給定行的排名?使用輔助表格進行PHP/MYSQL查詢排序

SELECT key_value FROM table; 

現在結果集,我需要根據各種其他關於這些項目的表信息排名每個項目。因此,如果產量 -

|key_value| 
|abcd1 | 
|abcd2 | 
|abcd3 | 

然後基於「ABCD1」在其他3個表值,我需要排序基於由除以總值的每個條目,並返回等級,然後輸出。有沒有辦法在單個SQL語句中完成所有這些?我想過設置一些sql變量並存儲不同的調用,然後進行計算,但我仍然不確定如何將它分配給SELECT語句輸出並對其進行排名。我很擅長PHP,但我是一個MySQL n00b。

這可能會混淆我描述它的方式 - 我可以回答更多問題以幫助更好地解釋我正在嘗試做什麼。

基本上,原始語句中返回的每一行實際上只與每個用戶有關,基於存儲在另外3個表中的該對象的信息。需要知道使用其他3個表中數據的最佳方式來排列第一個表中數據的相關性。

+0

基本上 - 原始語句中返回的每一行實際上只與每個用戶有關,基於存儲在另外3個表中的該對象的信息。需要知道使用其他3個表中數據的最佳方式來排列第一個表中數據的相關性。 – Wes

+0

請包括您嘗試失敗的SQL。或者至少是所討論表格的表格結構和您需要的輸出結果。 (ascii藝術,**不**作爲位圖) – Johan

回答

0

這裏的關鍵是你需要JOIN你的其他表,然後ORDER BY在他們的領域的一些表達。

SELECT key_value 
FROM table 
LEFT JOIN table_b on table_b.field = table.key_value 
LEFT JOIN table_c on table_c.field = table.key_value 
LEFT JOIN table_d on table_d.field = table.key_value 
ORDER BY table_b.some_field DESC, (table_c.another_field/table_d.something_else) ASC 
; 

根據連接條件,您可能需要GROUP BY table.key_value甚至使用子查詢以獲得相應的效果。

+0

實際上這真的很有幫助。所以請原諒我總共n00b,但是有可能將初始查詢輸出到某種臨時表中,然後再從中讀取數據? – Wes

+0

@ user947960:可能是的,但它可能會導致問題。提示:不要將臨時表與'innodb-file-per-table'設置結合使用。 – eswald