皆様、明けましておめでとうございます
状況:
MySQL db にいくつかのテーブルがあります。
スコア: (一意の ID、一意の (objectID、metricID))
| ID | ObjectID | MetricID | Score |
|--------+----------+----------+----------|
|0 | 1 | 7 | 0 |
|1 | 5 | 3 | 13 |
|2 | 7 | 2 | 78 |
|3 | 7 | 3 | 22 |
|.....
|--------+----------+----------+----------|
オブジェクト: (一意の ID、一意の ObjectName)
| ID | ObjectName |
|--------+------------|
|0 | Ook |
|1 | Oop |
|2 | Oww |
|3 | Oat |
|.....
|--------+------------|
メトリクス: (一意の ID、一意の MetricName)
| ID | MetricName |
|--------+------------|
|0 | Moo |
|1 | Mar |
|2 | Mee |
|3 | Meep |
|.....
|--------+------------|
特定のオブジェクト ID の場合:
- 「0」から「メトリックごとに 1 つ」までのスコアがいくつかあります。
要件:
特定の ObjectID について、次の基準に基づいて並べ替えられたリストを返したいと考えています。
- 提供されたオブジェクトとの類似性の順にランク付けされた返された行
- 提供されたオブジェクトを含まない返された行
- (これは私が思う難しいビットです)類似性の順序は、エントリがあるメトリックの提供されたオブジェクトのスコアからのスコアの数値オフセット/差に基づいて、提供されたオブジェクトからのオブジェクトの「スコア距離」によって決定されます提供されたオブジェクトと現在調べられているオブジェクトの両方
- objectID、オブジェクト名、スコア差 (または類似のもの) が含まれます
問題文:
これに使用する正しい SQL 構文がわかりません。これまでの実験は失敗しました。私はこの作業を可能な限り DB で行い、コード内の厄介な for ループなどでこの作業をほとんど、またはまったく実行したくありません。
追加の非機能要素
- 現在、Scores テーブルには 200 行しかありません。私の計算によると、最終的には最大で約 2,000,000 行になる可能性がありますが、おそらくそれ以上はありません。
- Objects テーブルには最大で約 5000 行しかありません
- Metrics テーブルには、最大で約 400 行しかありません。