2012-04-03 61 views
1

我正在尋找一種可能性,通過不屬於結果集或數據庫本身的權重來排列mysql結果。數據庫和權重之間的唯一聯繫是基於權重存在的唯一列。Mysql根據外部值對唯一字段進行加權

更準確地說我已經得到了MySQL表

+-------------------+ 
|Food    | 
+-------------------+ 
|id:int(unique)  | 
|name:string  | 
+-------------------+ 

和權重的食品ID之一外部源。例如,用戶使用100來加權食物1,使用200加食物2和加50加食物3.我想要的是用用戶給出的重量來命令結果。

你有什麼想法可以將這些外部信息應用到結果中嗎?


編輯:我沒有尋找一個解決方案,後來訂購查詢結果!我想要結果由MySQL服務器進行排序。

+0

你是什麼意思由外部來源? – 2012-04-03 13:31:58

+0

我目前正在編碼這個在PHP中,所以外部資源是一個PHP數組(以前由REST請求填充)在這種情況下。 – sics 2012-04-03 13:36:48

回答

4

在這裏你去:

SELECT 
CASE id 
when 1 then 300 
when 2 then 100 
when 3 then 200 
END as weight 
from tab 
order by weight; 

你在這裏做什麼是你的自定義值替換現有行的值,然後用這些值排序。

+0

這正是我一直在尋找的。非常感謝你! – sics 2012-04-03 13:49:53

+0

那麼如果它是正確的,你可以接受它作爲正確的答案! :) – Subodh 2012-04-03 13:50:44

+0

你知道mysql是否將權重映射到id以及索引是否也可以用於映射? – 2012-04-03 13:51:01

0

如果你的外部來源是phparray。那麼你應該使用php arraysorting函數而不是在mysql查詢中排序。

從MySQL表中獲取reuired數據並創建一個php數組。現在製作一個外部數據源的數組,並結合這兩個數組並使用array排序。

列出了她的PHP數組排序函數。您可以根據需要使用。

http://php.net/manual/en/array.sorting.php

+0

這對少量數據來說看起來不錯。在我的情況下,db表包含超過一百萬個條目。因此,在第一步中提取完整的數據集僅僅是爲了將該集合排序並過濾爲50個條目,應該比使用mysql功能更昂貴。儘管如此,謝謝你的回答! – sics 2012-04-03 13:56:43

相關問題