【问题标题】:MYSQL 'IN' and 'COUNT' issuesMYSQL 'IN' 和 'COUNT' 问题
【发布时间】:2016-04-30 18:46:50
【问题描述】:

我有 2 个可能使用不正确的 SQL 查询:

SELECT 
    `contract_id`,
    `contract_title`,
    `contract_description`,
    `contract_postalcode`,
FROM
    `gmw_contracts` 
WHERE contract_title COLLATE UTF8_GENERAL_CI REGEXP "test" 
    OR contract_description COLLATE UTF8_GENERAL_CI REGEXP "test" 
    AND contract_postalcode IN (
        53111,53113,53129,53175,53225,53227,53229,53757
    ) ;

SELECT 
    COUNT(`contract_postalcode`) 
FROM
    `gmw_contracts` 
WHERE `contract_title` COLLATE UTF8_GENERAL_CI REGEXP "test" 
    OR `contract_description` COLLATE UTF8_GENERAL_CI REGEXP "test" 
    AND `contract_postalcode` IN (
        53111,53113,53129,53175,53225,53227,53229,53757
    ) ;

第一个查询选择具有给定参数(如关键字和邮政编码等)的行,但我没有得到所需的结果。似乎完全忽略了邮政编码。

第二个查询应该计算它,以便我可以在 PHP 中对结果进行分页(但我不想计算 PHP)

第一个查询的解决方案:我可以使用 HAVING 而不是 AND。但我也需要使用计数查询来完成。在此示例中,COUNT 和 HAVING 不能一起使用。

你有什么提示或解决办法吗?

【问题讨论】:

  • 在您的第一个查询中,您能在此处看到逗号吗,...`contract_postalcode`, FROM ...
  • 哦,是的,你是对的。它是一个复制和粘贴错误。我缩短了对 stackoverflow 的查询。

标签: php mysql count pagination


【解决方案1】:

你的第一个问题是ORAND的组合引起的:

... WHERE ... OR ... AND ...

如果满足任何OR 条件,则AND 子句可能不会执行您想要/期望的操作,因为条件返回true

你可能想要:

... WHERE (... OR ...) AND ...

【讨论】:

  • 我的女朋友告诉我不要大喊大叫,当我说:“天哪,真的吗?这就是解决方案!!!只有两个括号!请上帝帮助我!” :-) 谢谢,这就是工作。
  • @user3465835 呵呵,让猫跳到天花板上。看到它回来是更有趣的部分。 哈哈
猜你喜欢
  • 2021-01-30
  • 1970-01-01
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 2013-04-21
  • 2023-03-26
  • 2023-03-02
相关资源
最近更新 更多