MYSQL' IN'和' COUNT'问题

时间:2016-04-30 10:41:12

标签: php mysql count pagination

我有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在这个例子中没有合作。

你有任何提示或解决方案吗?

1 个答案:

答案 0 :(得分:2)

您的第一个问题是由ORAND

的组合引起的
... WHERE ... OR ... AND ...

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

你可能想要:

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