3

执行此查询的最佳方法

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

这里第一个变量保持不变,但第二个变量改变了让我们说一个 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

根据您的要求以及订单很重要的含义,您有两种选择:

  1. 循环通过一堆LIKE查询(就像你正在做的那样)
  2. 正则表达式

我的理解是 MySQL 中的正则表达式对性能有重大影响,但我无法直接验证这一点。如果您需要,我将尝试使用正则表达式发布您的查询示例,我有几分钟的时间进行测试。

应该看起来像这样:

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

在此处查看 SQLFiddle 中的证明:http ://sqlfiddle.com/#!2/8cd26/1

于 2013-02-05T16:01:43.473 回答