首页 > 解决方案 > MySQL / PHP - 在 SELECT 语句的 WHERE 部分计算多个变量

问题描述

我有以下 PHP/MySQL 语句:

$varTemp = mysqli_num_rows(mysqli_query($connect,"SELECT * FROM table WHERE
(Date1 BETWEEN '2017-10-01' AND '2017-10-31' AND marker = 'Post' AND grade1 > 224) OR
(Date2 BETWEEN '2017-10-01' AND '2017-10-31' AND marker = 'Post' AND grade2 > 224) OR
(Date3 BETWEEN '2017-10-01' AND '2017-10-31' AND marker = 'Post' AND grade3 > 224) OR
(Date4 BETWEEN '2017-10-01' AND '2017-10-31' AND marker = 'Post' AND grade4 > 224)"));

现在OR,语句之间有一个。我也尝试过UNION+但一直得到相同的结果。该语句应该返回 20 条记录,但它只给我 18 条记录,因为有两个人同时在“Date1”和“Date2”语句中。

我的问题是:如何更改此语句以计算那些重复记录?

标签: phpmysql

解决方案


的性质OR决定了一条记录只计算一次,而不管该WHERE子句的多少部分匹配。如果您想重复计算多个范围内的记录,那么您在正确的轨道上使用UNION. 但是,UNION默认情况下会删除重复项,从而为您提供与OR. 在您的情况下,您可能想要使用UNION ALL,它与 相同,UNION但不会删除重复项。


推荐阅读