0

複数の関連付けられた ID コードが 1 つのフィールドにスペースで区切られてリストされている既存のデータベースを使用しています。例: 「21 1894 774」

このフィールドに特定の数値を含むすべてのレコードを取得するクエリを実行しようとしています。たとえば、「21」を検索する場合、「21 1894 744」、「21 4」、「1723 21 192」などを含むレコードと一致させたいとします。

問題は、他の数値の部分一致もしていることです。LIKE '%21%' のクエリは、"221"、"215"、"1821" などに一致します。

スペースを使ってさまざまな組み合わせ ('% 21%'、'%21 %' など) を試してみましたが、それはより優れていましたが、それでも他の数字の一部と一致していました。また、最初の位置にある可能性があるため、スペースで囲まれた数字だけを実行することもできません。

このテーブルをクエリして、スペース区切りのフィールドにスタンドアロンの「21」を持つすべてのレコードを取得するにはどうすればよいですか? 私は困惑しています!

ありがとう!

4

3 に答える 3

2

この条件で試してください:

SELECT * FROM your_table WHERE the_text_field LIKE '21 %' OR the_text_field LIKE '% 21 %' OR the_text_field LIKE '% 21' OR the_text_field = '21'
于 2012-12-15T19:56:05.760 に答える
1

単純なクエリが必要な場合は、 aurel.g からの回答が唯一の方法です。ただし、クエリごとにデータベース全体のフルスキャンを実行するため、パフォーマンスが大幅に低下します。

これを頻繁に行う必要がある場合は、データベースを修正することをお勧めします。1 つの数値用のフィールドと、その数値が見つかった元のレコードを指す外部キーの 2 つのフィールドだけを含む新しいテーブルを追加します。次に、データ全体の 1 回のスキャンを実行し、そのテキスト フィールドの各数値のレコードを作成します。最後に、両方の列に複合インデックスを追加します。

その後、単一の数値ですべてのレコードをクエリすると、非常に高速かつ正確になります。

于 2012-12-15T20:02:05.490 に答える
1

MySQL は正規表現をサポートしています。数字を分割する方が間違いなく良いですが、次のように一致を検索できます。

select * from your_table where the_text_field regexp '\b21\b';

于 2012-12-15T20:01:48.670 に答える