Sql选择where子句问题

时间:2013-04-13 14:15:45

标签: mysql sql select where

希望有人可以帮助,这正在推动我做出。

有人可以告诉我这个选择有什么问题,它目前正确搜索,但它会检查“画廊”中的每个结果,而不仅仅是“类别:夏天”和“状态:已使用”中的结果。

所以我想要它只是在类别“夏天”和状态“使用”时搜索关键字($ 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");

3 个答案:

答案 0 :(得分:1)

添加如下括号:

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%')

答案 1 :(得分:1)

您正在使ANDOR运算符短路。尝试通过将OR放在一个组中来隔离{/ 1}},

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

作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

答案 2 :(得分:0)

尝试将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");