2014-10-29 56 views
0

,当我有这样的要求:Mysql的请求()后不工作,

SELECT fr,text_id FROM texts 
WHERE (
    fr REGEXP '[>.:, ]le[<.:, ]' OR fr REGEXP '^le[[:space:]]?' 
    OR fr REGEXP '[[:space:]]le[[:space:]]?$' 
) AND fr REGEXP '[>.:, ]la[<.:, ]' '' 
ORDER BY text_id DESC LIMIT 0, 20 

它的工作原理

但是,当我把()它不工作:

SELECT fr,text_id FROM texts 
WHERE (
    fr REGEXP '[>.:, ]le[<.:, ]' OR fr REGEXP '^le[[:space:]]?' 
    OR fr REGEXP '[[:space:]]le[[:space:]]?$' 
) AND (fr REGEXP '[>.:, ]la[<.:, ]') '' 
ORDER BY text_id DESC LIMIT 0, 20 

把()放在所有其他位置或与AND一起,所以请求只显示搜索到的所有文字类型出现在文本中的结果。和其他字符

所以最好这应该工作:

SELECT fr,text_id FROM texts 
WHERE (
    fr REGEXP '[>.:, ]le[<.:, ]' 
    OR fr REGEXP '^le[[:space:]]?' 
    OR fr REGEXP '[[:space:]]le[[:space:]]?$' 
) AND (
    fr REGEXP '[>.:, ]la[<.:, ]' 
    OR fr REGEXP '^la[[:space:]]?' 
) OR fr REGEXP '[[:space:]]la[[:space:]]?$' 
) '' ORDER BY text_id DESC LIMIT 0, 20 

如果可能帮助我用这个循环将文字量:

for($i=0;$i<$wordsLenght;$i++) 
    { 
     if($i !== 0) 
     { 

     $recherche .= ")AND (".$lang." REGEXP '[>.:, ]".$words[$i]."[<.:, ]') "; 
     } 
     else 
     { 

       if($wordsLenght == 1) 
       { 
        $recherche = "".$lang." REGEXP '[>.:, ]".$words[0]."[<.:, ]' OR (".$lang."  
        REGEXP '^".$words[0]."[[:space:]]?') OR ".$lang." REGEXP 
        '[[:space:]]".$words[0]."[[:space:]]?$'";     
       } 
       else 
       { 
        $recherche = "(".$lang." REGEXP '[>.:, ]".$words[0]."[<.:, ]' OR ".$lang."  
        REGEXP '^".$words[0]."[[:space:]]?' OR ".$lang." REGEXP 
        '[[:space:]]".$words[0]."[[:space:]]?$'"; 
       } 

     } 
    } 

这是在用作功能在另一个函数中的一个参数,它的一部分对应WHERE之后的mysql请求。

+2

你希望用这些空的''''做什么? – Wrikken 2014-10-29 16:08:39

+0

尝试SELECT fr,text_id FROM texts WHERE(fr REGEXP'[>。:,] le [<。:,''或fr REGEXP'^ le [[:space:]]?'或fr REGEXP'[[:space :]] le [[:space:]]?$''AND(fr REGEXP'[>。:,] la [<。:,]')''ORDER BY text_id DESC LIMIT 0,20 – Abhijeet 2014-10-29 16:09:03

+0

does not work ... – user3595784 2014-10-29 16:17:30

回答

0

您是否尝试去除这些看似多余的''后')?

SELECT fr,text_id FROM texts 
WHERE (
    fr REGEXP '[>.:, ]le[<.:, ]' OR fr REGEXP '^le[[:space:]]?' 
    OR fr REGEXP '[[:space:]]le[[:space:]]?$' 
) AND (fr REGEXP '[>.:, ]la[<.:, ]') 
ORDER BY text_id DESC LIMIT 0, 20 
+0

这是其余工作的基础!你为我节省了很多时间,减轻了压力,非常感谢你! – user3595784 2014-10-29 16:41:26

+0

没问题,它看起来像维护一个查询的恶梦 – aland 2014-10-29 19:07:37

+0

我会把它当作恭维^^到目前为止,我渴望快速进步,并感谢你,它让我感动! – user3595784 2014-10-30 08:54:15