3

このクエリを実行する最良の方法

SELECT * FROM `table` WHERE  `column` like '%abc% %xcdb%' OR  `column` like '%abc% %dfhj%'

ここで、最初の変数は同じままですが、2 番目の変数は 10 から 20 の配列としましょうcolumn

テーブルデザイン

<table >
<tr>
    <td>id</td>
    <td>column</td>
    <td>other</td>
</tr>
<tr>
    <td>1;</td>
    <td>fsyd,**abc**,jgd,**xcdb**,sdfr</td>
    <td>tom</td>
</tr>
<tr>
    <td>2</td>
    <td>wer,tyuy,dhjd,dbhd</td>
    <td>john</td>
</tr>
<tr>
    <td>3;</td>
    <td>asy,gtyt,bnhhs,**abc**,bgy,trdcv,**dfhj**</td>
    <td>colin</td>
</tr>
     <tr>
    <td>4</td>
    <td>wer,**xcdb**,dhjd,**abc**,dbhd</td>
    <td>john</td>
</tr>
</table>     

このクエリは、id (1 と 3) の結果を返しますが、シーケンスをチェックするため、4 は返しません。これは正しい選択ステートメントであり、必要な結果を返しますが、これを行うためのより良い方法を求めているだけです。

4

1 に答える 1

0

あなたが求めていることと、順序が重要であるという意味に基づいて、2 つのオプションがあります。

  1. 一連のクエリをループするLIKE(あなたがやっているように)
  2. REGEXの

私の理解では、MySQL の正規表現には重大なパフォーマンス ヒットがありますが、それを直接確認することはできません。必要に応じて、正規表現を使用してクエリの例を投稿してみます。テストするのに数分かかります。

次のようになります。

SELECT * FROM `table` WHERE  `column` REGEXP('.*abc.*((xcdb)|(dfhj).*)')

ここで SQLFiddle の証拠を参照してください: http://sqlfiddle.com/#!2/8cd26/1

于 2013-02-05T16:01:43.473 に答える