2012-04-03 7 views
1

現在、結果セットまたはデータベース自体に含まれない重みによってmysql結果を並べ替える可能性を探しています。データベースと重みとの間の唯一のリンクは、重みが存在するための1つの固有の列に基づいています。Mysqlはユニークなフィールドに外部値を重み付けします

私はMySQLのテーブルに

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

、食品IDの重みの1つの外部ソースを持って、より正確には。例えば、ユーザーは100で食糧1を、200で食糧2を、50で食糧3を重み付けします。私が望むのは、ユーザーが与えた重みで結果を並べ替えることです。

結果にこれらの外部情報をどのように適用することができますか?


編集:私は後で検索結果を注文するソリューションを探していません!私はその結果をmysqlサーバが注文するようにしたい。ここで

+0

外部ソースの意味は? –

+0

私は現在、PHPでこれをコーディングしています。この場合、外部ソースはPHP配列(以前はRESTリクエストで埋められています)です。 – sics

答えて

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

+0

それが正しい場合は、それを正しい答えとして受け入れることができます! :) – Subodh

+0

mysqlが重み付けをidにマップするかどうか、インデックスをこのマッピングでも使用できるかどうか知っていますか? –

0

外部ソースがphparrayの場合。 mysqlクエリでソートする代わりにPHP arraysorting関数を使うべきです。

mysqlテーブルからreuiredデータを取得し、そのPHP配列を作成します。今度は、外部ソースの配列を作成し、両方の配列を組み合わせてarrayソートを使用してください。

彼女のPHP配列の並べ替え機能が記載されています。必要に応じて使用することができます。

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

+0

これは少量のデータに適しています。私の場合、dbテーブルは100万以上のエントリで構成されています。したがって、セットを50個まで並べ替え、フィルタリングするための最初のステップである完全なデータセットをフェッチするのは、代わりにmysqlの機能を使用するほうが高価です。それにもかかわらず、あなたの答えをありがとう! – sics

関連する問題