Php Mysql分组依据和基于日期条件的联合

Php Mysql分组依据和基于日期条件的联合,php,mysql,group-by,Php,Mysql,Group By,以下是我的查询-它基本上是有效的,但我可以看到它在一个条件下失败-在查询后解释: $firstDay = '2020-03-01' ; $lastDay = '2020-03-31' ; SELECT * FROM clubEventsCal WHERE ceFreq!=1 AND (ceDate>='$firstDay' AND ceDate<='$lastDay') UNION SELECT * FROM clubEve

以下是我的查询-它基本上是有效的,但我可以看到它在一个条件下失败-在查询后解释:

$firstDay = '2020-03-01' ;
$lastDay = '2020-03-31' ;
SELECT * FROM clubEventsCal 
            WHERE ceFreq!=1
              AND (ceDate>='$firstDay' AND ceDate<='$lastDay') 
  UNION SELECT * FROM clubEventsCal 
            WHERE ceFreq=1
              AND (ceDate>='$firstDay' AND ceDate<='$lastDay') 
  GROUP BY ceStopDate ORDER BY ceID,ceDate ;
上述查询提取
ceFreq!=1
,它为
ceFreq=1
记录(rids:4和5)提取一条记录。对于三月份,我们并不一定关心CEID1117泄漏到四月份。但当我们调出4月份的记录时,我们需要排除rid 9和10,因为事件(ceID=1117)已经在3月份被记录

SELECT * FROM clubEventsCal 
...
GROUP BY ceStopDate
这是胡言乱语

MySQL(取决于配置)允许它不受阻塞,但它在语义上是错误的,并且是一种反模式

在某些边缘情况下,返回的值可能包含重要数据,但它们非常罕见。试图用不起作用的代码解释问题可能不是一个好策略

查看您的代码,您可能不需要联合,但示例记录中没有足够的信息来说明这是否真的会产生您期望的结果(速度会明显加快,具体取决于您的索引):

选择IF(cefreq=1,rid,null)作为合并器
,ceid
,cefreq
,最小值(cedate),最大值(cedate)
,ceStopDate
来自clubEventsCal
其中cID=1001
而且很活跃=2.

及(ceDate>=“$firstDay”和ceDate您是否可以发布SQL脚本来创建表并用数据填充它,还可以澄清查询现在返回的内容与您希望它返回的内容相比。根据您发布的结果集和结果描述,现在还不清楚查询返回的内容set@symbcbean-看了我的o最初的帖子我意识到它写得很糟糕。我简化了查询字段并添加了更多的记录来详细说明记录和问题。希望它现在更有意义。
SELECT * FROM clubEventsCal 
...
GROUP BY ceStopDate
SELECT IF(cefreq=1, rid, null) AS consolidator
, ceid
, cefreq
, MIN(cedate), MAX(cedate)
, ceStopDate
FROM clubEventsCal 
WHERE cID=1001 
  AND ceActive!=2
  AND (ceDate>='$firstDay' AND ceDate<='$lastDay') 
GROUP BY IF(cefreq=1, rid, null)
, ceid
, cefreq
, ceStopDate
;