mysql select语句组合一对多

时间:2013-02-02 12:04:44

标签: mysql

执行此查询的最佳方式

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)的结果,但不会检查序列。 这是一个正确的选择语句,并返回我想要的结果,但我只是想要一个更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:0)

根据您的要求和订单的含义,您有两种选择:

  1. 循环查看一堆LIKE个查询(正如您所做的那样)
  2. REGEX的
  3. 我的理解是MySQL中的正则表达式有显着的性能损失,但我无法直接验证。如果您需要,我会尝试使用正则表达式发布您的查询示例,我有几分钟的时间来测试。

    应该是这样的:

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

    在这里查看SQLFiddle中的证据:http://sqlfiddle.com/#!2/8cd26/1