mySql查询给我错误的结果

时间:2016-03-30 11:19:43

标签: php mysql query-string

我的下表名为问题

  `questionID` int(11) NOT NULL AUTO_INCREMENT,
  `questioncategoryID` int(11) NOT NULL,
  `questionstatusID` int(11) NOT NULL,
  `organizationID` int(11) NOT NULL,
  `legalformID` int(11) DEFAULT NULL,
  `questionProtocolID` varchar(45) DEFAULT NULL,
  `questionDisplayedRecordID` int(11) NOT NULL,
  `questionTitle` text NOT NULL,
  `questionSummary` text,
  `questionText` longtext NOT NULL,
  `questionAnswerSummary` text,
  `questionAnswerText` longtext,
  `questionMetaTags` text,
  `questionAskedBy` int(11) NOT NULL,
  `questionAnsweredBy` int(11) DEFAULT NULL,
  `questionAskedOnDate` datetime NOT NULL,
  `questionAnsweredOnDate` datetime DEFAULT NULL,
  `questionAskedFromIp` varchar(255) NOT NULL

我正在尝试构建条件查询,即用户在我的搜索表单中有选项来搜索:

类别(questioncategoryID) 法律形式(legalformID) 从日期开始(questionAnsweredOnDate) 到目前为止(questionAnsweredOnDate) 搜索字词

用户可以将所有字段留空,也可以全部使用。

更多解释:

  1. 类别(questioncategoryID) - 如果将其留空,则表示他希望查看所有类别的问题,如果不是,他只想查看特定类别的问题。

  2. 法律形式(legalformID) - 如果将其留空,则表示他希望查看所有法律形式的问题,否则他只想查看具有特定legalformID的问题

  3. 从日期(questionAnsweredOnDate)开始,只有在此日期之后才能回答的问题(他可以将此字段留空)

  4. 到目前为止(questionAnsweredOnDate)只有在此日期之前回答的问题(他可以将此字段留空)

  5. 如果搜索字词不是空白,则应在以下位置找到搜索字词:questionTitle或questionSummary或​​questionText(他可以将此字段留空)

  6. 我正在尝试使用以下查询获取数据:

    SELECT * FROM (`question`) 
        WHERE `questioncategoryID` = 5
        AND `legalformID` = 16 
        AND `questionTitle` LIKE '%Lorem Ipsum%' 
        OR `questionSummary` LIKE '%Lorem Ipsum%' 
        OR `questionText` LIKE '%Lorem Ipsum%' 
        OR `questionMetaTags` LIKE '%Lorem Ipsum%' 
        ORDER BY `questionAskedOnDate` DESC
    

    但是此查询会返回属于类别5,10和7的问题以及具有legalformID 0,3和16的问题....

    正如您所看到的,我甚至没有尝试使用日期,因为即使没有它们,我也无法使查询正常工作。所以,请在解决方案中包含日期。

1 个答案:

答案 0 :(得分:1)

据推测,你打算:

WHERE `questioncategoryID` = 5 AND
      `legalformID` = 16 AND
      (`questionTitle` LIKE '%Lorem Ipsum%' OR
       `questionSummary` LIKE '%Lorem Ipsum%' OR
       `questionText` LIKE '%Lorem Ipsum%' OR
       `questionMetaTags` LIKE '%Lorem Ipsum%' 
      )

混合WHEREAND时,请在OR中使用括号。