1

さまざまな形式 (points_id) で、多数のフィニッシャー (N) の中で特定の場所 (P) に対して受け取ったポイントを返す MYSQL ルックアップ テーブルを用意します。イベントごとに異なるポイント構造が使用されます。付与されるポイントは、フィニッシャーの数 (N) によって異なる場合があります。そうでない場合もあります。以下は、2 つのサンプル構造を含む短いバージョンのテーブルです。points_id -1 ポイントは N に依存します。 Point_id -2 ポイントは依存しません。

ポイント

       points_id |   P   |   N   | points |
           1     |   1   |   3   |   90   |
           1     |   1   |   2   |   85   |
           1     |   1   |   1   |   80   |
           1     |   2   |   3   |   60   |
           1     |   2   |   2   |   50   |
           1     |   3   |   3   |   30   |
           3     |   1   |       |  100   |
           3     |   2   |       |   90   |
           3     |   3   |       |   80   |
           3     |   3   |       |   70   |

だから私の質問:1)テーブルデータにワイルドカードを入れる方法はありますか。たとえば、空白を示す N 列に % が含まれていて、このクエリを実行した場合。

SELECT points from t1 WHERE points_id=3 and P=3 and N=2 

それは96を返しますか?? PS私はこれがうまくいかないことを知っていますが、私の考えを示しています。

2)高速にしたいので、より大きなクエリで使用する手順に入れることができます。上に示したことを行うための非常に簡単な方法がない限り、私は推測しています。最速の方法は、points_id =3 の場合にすべての異なる N の行を持つことです。本当?

4

2 に答える 2

0

あなたは UNION ALL を検討するかもしれません:

SELECT points from t1 WHERE points_id=3 AND P=3
UNION ALL
SELECT points from t1 WHERE points_id=3 AND N=2 

これにより、P=3 または N=2 に関係なく結果が得られます。データベーススキーマをコピーしてこれを試したところ、次のようになりました。

points
------
80
70

大量のデータでこれを高速にしたい場合は、インデックスや主キーが必要です。

于 2012-04-30T15:23:14.860 に答える