2016-08-06 10 views
0

MYSQLの新人ですので、私にご負担ください。生成列から値でmysqlテーブルの行を並べ替えます

  • モデル
  • MPG
  • 価格
  • 座席の

を作り、私が持っている:

私は車についてのデータを格納するCarsと呼ばれるテーブルを持っていますpriorityというテーブルがあります各車の特性が0-5のスケールで私にとってどれほど重要かを考えてください。したがって、この表には、次のようになります。

+-----+-------+-------+ | MPG | Price | Seats | +-----+-------+-------+ | 0 | 2 | 3 | +-----+-------+-------+

私は、各Carが好きなのためのスコアを生成することができるようにしたい、次のとおりです。

score = (car.MPG * priority.MPG) + (car.Price * priority.Price) + (car.seats * priority.seats)

を、私は基本的にSelect * from cars order by scoreをしたいです。しかし、私はどのようにこのクエリを形成するか分からない。

お願いします。

答えて

1

これは素晴らしい作品

select a.* from cars a, priority b order by ((a.mpg* b.mpg)+(a.price*b.price)+(a.seats*b.seats)) 
+0

を使用してみてください。スコアリングシステムが複雑になると、それを関数として保存して何とか呼び出せる方法があるのだろうかと疑問に思っていましたか? – user3509258

+1

はい...あなたは 'score'(あなたのパラメータ...(mpg..price ...席...))は、CREATE FUNCTION機能 を作成することができINT が あなたのスコアリングシステムをBEGIN RETURNS ... RETURNS値.. END; ... とあなたのクエリが を選択...この関数を呼び出します*スコア(a.mpg、a.price、a.seats)と – Christian

+0

幸運によって順番車から。この提案 – Christian

0

メインセレクトは、order句を含む別のセレクトにラップする必要があります。このような何か:

SELECT * FROM (SELECT c.*, ((c.MPG * priority.MPG) + (c.Price * priority.Price) + (c.seats * priority.seats)) AS score FROM cars) x ORDER BY x.score 
関連する問題