mysql php查询字符串包含以input

时间:2017-07-23 20:12:26

标签: mysql

mysql中是否有内置方式来查询包含特定单词的列,而单词也以输入开头。

例如,输入是" EF"

#1 ABCD EFGH    <- Want this one
#2 BCDE FGHA 
#3 CDEF GHAB
#4 EFGH ABCD    <- And this one

如果我查询%EF%,它会给我#1,#3和#4,如果我查询EF%,它只会给#4。

基本上,我想知道mysql是否可以首先在PHP中执行preg_split,然后查询EF%,或者其他内容。

3 个答案:

答案 0 :(得分:2)

使用正则表达式。在MySQL中,正则表达式模式[[:<:]]匹配单词的开头,所以你可以这样做:

WHERE column REGEXP '[[:<:]]EF'

Documentation

答案 1 :(得分:0)

在这里回答我自己的问题。刚刚想出了一个解决方案,不是很漂亮,但它确实有效。

我刚把参数改成了

((Column LIKE '%...%' AND Column LIKE '% ...%') Or (Column LIKE '...%')) AND ...

将这一天留在这里一天,看看是否有人有更好的解决方案。

答案 2 :(得分:0)

如果您的专栏有两个字,那么您可以使用SUBSTR()LOCATE()

+--------------------------------+
| MyColumn                       |
+--------------------------------+
| Apple Effect                   |
| Effortless Orange              |     
+--------------------------------+

SELECT *
FROM (
    SELECT 
        *,
        SUBSTR(@values,1,LOCATE(' ',MyColumn)-1) AS FirstWord
        SUBSTR(@values,LOCATE(' ',@values)+1) AS SecondWord
    FROM MyTable
) AS X
WHERE FirstWord LIKE 'EF%'
OR SecondWord LIKE 'EF%'

如果您的列有两个以上的单词,那么事情会复杂一点,但您可以使用SUBSTRING_INDEX()来查找第N个实例。

+--------------------------------+
| MyColumn                       |
+--------------------------------+
| The Perfect Apple Effect       |
| The Special Effortless Orange  |     
+--------------------------------+

SUBSTRING_INDEX(SUBSTRING_INDEX(@values,' ',4),' ',-1) =获取第四个单词。

可以找到更多示例和信息here