在AND之后,Mysql request()不起作用

时间:2014-10-29 16:03:05

标签: php mysql regex

当我收到此请求时:

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

放置()的目的是将所有其他OR与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请求。

1 个答案:

答案 0 :(得分:0)

你是否试图删除这些看似多余的&#39;&#39;在最后一次之后)?

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