2017-05-10 12 views
0

これは私の最初の質問です。私は明確かつ事実であるように最善を尽くします。私はかなり長い間googledしたが、私が望む結果を得たことはなかった。私のMysqlの知識は最高ではないし、多分私はthis answerを私の望む機能で動作させることができないのです。まずMysql:複数の列に基づいて最も類似した数値の行を見つけよう

ここに私のMySQLのデータだ

user | speed | strength | stamina | precision 
--------------------------------------------- 
1 | 4  | 3  | 5  | 2 
2 | 2  | 5  | 3  | 4 
3 | 3  | 4  | 6  | 3 

質問

私は特定のユーザに最も類似した行を見つけるMySQLのクエリをしたいです。たとえば、ユーザー1と最も類似しているユーザーを表示したい場合は、ユーザー3を探します。ユーザー1とユーザー2の合計値は同じですが(14)、1と3がより似ています。ビュー。

enter link description here

私は、誰かが私がどうあるべきかのMySQL関数を知っていたならばそう嬉しいし、感謝されると思います、またはあなたが任意のアイデアを持っている場合。

+0

のようなSQLに変換することができます私は、主なものは、あなたが最も類似によって何を意味するか指定する方法を考え出すすることだと思います。これは、それを実装するコードを記述するのに役立ちます。 –

+0

お返事ありがとうございます。ナイジェル!たぶん「最も類似している」とは、それを表現する正しい表現ではないかもしれません。後でStefanosのコードが動作するかどうかテストします。 –

答えて

0

あなたの要件が機能に変換されるのは、「能力レベルでのユーザースコアの差の平均の最小値」だと思います。

そのような場合、それはこの

select t2.user, 
     (
      abs(t1.speed - t2.speed) + 
      abs(t1.strength - t2.strength) + 
      abs(t1.stamina - t2.stamina) + 
      abs(t1.precision - t2.precision) 
     )/4 as diff_avg 
from users t1 
cross join 
     users t2 
where t2.user <> t1.user and 
     t1.user = 1 /* the starting user id goes here */ 
order by 2 asc 
limit 1 
+0

ステファノさんありがとう!私は今日あなたのコードに潜んでいきますが、私の問題を理解したようです。 私はそれをテストしたときに再び書きます。 :) –

+0

私は今あなたのコードをテストして、それは魅力のように動作します!ステファノさんありがとうございました。ほんとうにありがとう! –

関連する問題