【问题标题】:mySql query gives me wrong resultsmySql 查询给了我错误的结果
【发布时间】:2016-03-30 11:19:43
【问题描述】:

我有一个名为question的表格:

  `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) - 如果将其留空,则表示他想查看所有法律形式的问题,否则他只想查看具有特定法律形式 ID 的问题

  3. 从日期 (questionAnsweredOnDate) 仅在此日期之后回答的问题(他可以将此字段留空)

  4. To Date (questionAnsweredOnDate) 仅在此日期之前回答的问题(他可以将此字段留空)

  5. 搜索词如果不是空白搜索词应该在:questionTitle OR in questionSummary OR in questionText(他可以将此字段留空)

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

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 的问题以及法律形式 ID 为 0,3 和 16 的问题....

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

【问题讨论】:

  • where 中的条件周围加上括号。当您混合使用 ANDOR 时,这始终是可取的。

标签: php mysql query-string


【解决方案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%' 
      )

当您混合使用ANDOR 时,在WHERE 中使用括号。

【讨论】:

  • 如果我在 categoryID = 6 和 legalformID = 16 中更改我的查询,查询返回 0 个结果,并且我在数据库中有一个问题,其 categoryID = 6、legalformID = 16 和 Lorem Ipsum 在标题
  • 抱歉我的错误...我在看错单元格,在盯着代码一个小时后...我混合了字段...感谢您的帮助
  • @user2417624 。 . .您可以添加AND,后跟日期的一些条件。
  • AND 应该出现在查询的哪一部分?在 legalformID 之后?
  • 它实际上可以去任何地方,但legalformID = 16 AND <date condition> AND 可以正常工作。
猜你喜欢
  • 2010-10-13
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多