[英]Sql select where clause issue
希望有人能帮到我。
有人能告诉我这个选择有什么问题吗,它当前可以正确搜索,但它会检查“ Galleries”中的每个结果,而不仅仅是“ category:summer”和“ Status:used”中的结果。
因此,我要执行的操作是仅在关键字“夏季”和状态“已使用”中搜索关键字($ find)。 任何想法,我需要做什么。 大声笑到此为止。 强调:)
$result = mysql_query("
SELECT
Gallery_URL,
Thumbnail_URL,
Nickname,
Description
FROM Galleries
WHERE
Category = 'summer'
AND Status = 'Used'
AND Nickname LIKE '%$find1%'
OR Nickname LIKE '%$find2%'
OR Nickname LIKE '%$find3%'
OR Description LIKE '%$find1%'
OR Description LIKE '% $find2%'
OR Description LIKE '%$find3%'
LIMIT 0 , 10");
添加这样的括号:
SELECT Gallery_URL, Thumbnail_URL, Nickname, Description
FROM Galleries
WHERE
Category = 'summer'
AND Status = 'Used'
AND (Nickname LIKE '%$find1%'
OR Nickname LIKE '%$find2%'
OR Nickname LIKE '%$find3%'
OR Description LIKE '%$find1%'
OR Description LIKE '% $find2%'
OR Description LIKE '%$find3%')
您正在短路AND
和OR
运算符。 尝试通过将OR
放在一组中来隔离OR
,
SELECT Gallery_URL,
Thumbnail_URL,
Nickname,
Description
FROM Galleries
WHERE Category = 'summer' AND
Status = 'Used' AND
(
Nickname LIKE '%$find1%' OR
Nickname LIKE '%$find2%' OR
Nickname LIKE '%$find3%' OR
Description LIKE '%$find1%' OR
Description LIKE '% $find2%' OR
Description LIKE '%$find3%'
)
LIMIT 0 , 10
作为一个旁注,查询是脆弱的SQL Injection
,如果变量的值(一个或多个 )从外面走了进来。 请查看下面的文章,以了解如何防止它。 通过使用PreparedStatements
您可以摆脱在值周围使用单引号的麻烦。
尝试将表达式分组到where子句中。 例如
$result = mysql_query("SELECT Gallery_URL, Thumbnail_URL
, Nickname, Description
FROM Galleries
WHERE Category = 'summer'
AND Status = 'Used'
AND (Nickname LIKE '%$find1%'
OR Nickname LIKE '%$find2%'
OR Nickname LIKE '%$find3%'
OR Description LIKE '%$find1%'
OR Description LIKE '% $find2%'
OR Description LIKE '%$find3%')
LIMIT 0 , 10");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.