当我收到此请求时:
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请求。
答案 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