php - MySQL 如何在where 中包含两个子句?

标签 php mysql where-clause

SELECT 
  cms_module_ladu_batch.id AS batch_id, 
  name, t1, cms_module_ladu_batch.date_changed AS date_ch, 
  t13, t2, t3, t4, bkuup, date_modified, date_created, 
  kogused.aadress AS aadress, 
  kogused.kogus AS kogus, 
  SUM(kogused.kogus) AS total 
FROM 
  cms_module_ladu_batch 
  LEFT JOIN kogused 
    ON cms_module_ladu_batch.id = kogused.bid 
WHERE 
  t2!='Sildid' 
GROUP BY 
  batch_id

这就是 MySQL 代码 - 问题如下。我需要排除总计为 0 且 date_ch 早于一个月的行(date_cd 格式为“2011-01-01 00:00:00”)。 是否可以? http://jsfiddle.net/tiitremmel/2mvrr/1/ - jsfiddle 示例 - 第一个表就像 mysql 结果是默认的,第二个表是结果的样子。

最佳答案

将日期条件添加到 WHERE 语句中并排除 SUM 作为 HAVING-语句。它应该看起来像这样:

SELECT    cms_module_ladu_batch.id AS batch_id,
          cms_module_ladu_batch.date_changed AS date_ch,
          kogused.kogus AS kogus,
          SUM(kogused.kogus) AS total 
FROM      cms_module_ladu_batch 
LEFT JOIN kogused ON cms_module_ladu_batch.id = kogused.bid 
WHERE     t2 != 'Sildid' 
          AND (
                  (
                   cms_module_ladu_batch.date_changed < DATE_SUB(NOW(), INTERVAL 1 MONTH)
                   AND SUM(kogused.kogus) > 0
                  )
              OR
                  cms_module_ladu_batch.date_changed > DATE_SUB(NOW(), INTERVAL 1 MONTH)
              )
GROUP BY  batch_id;

或者...使用 UNION 语句将两个 SELECTS 粘合在一起。

SELECT   cms_module_ladu_batch.id AS batch_id,
         cms_module_ladu_batch.date_changed AS date_ch,
         kogused.kogus AS kogus,
         SUM(kogused.kogus) AS total 
FROM     cms_module_ladu_batch 
LEFT JOIN kogused ON cms_module_ladu_batch.id = kogused.bid 
WHERE t2 != 'Sildid' 
         AND cms_module_ladu_batch.date_changed < DATE_SUB(NOW(), INTERVAL 1 MONTH)
GROUP BY batch_id 
HAVING total > 0
UNION
SELECT   cms_module_ladu_batch.id AS batch_id,
         cms_module_ladu_batch.date_changed AS date_ch,
         kogused.kogus AS kogus,
         SUM(kogused.kogus) AS total 
FROM     cms_module_ladu_batch 
LEFT JOIN kogused ON cms_module_ladu_batch.id = kogused.bid 
WHERE t2 != 'Sildid' 
         AND cms_module_ladu_batch.date_changed > DATE_SUB(NOW(), INTERVAL 1 MONTH)
GROUP BY batch_id; 

尝试两者,看看哪种最适合您的解决方案。

关于php - MySQL 如何在where 中包含两个子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5472790/

相关文章:

php - 如果其值在数据库中,请选中复选框

mysql - 过滤后如何连接两个表

sql - 仅选择数值,否则返回 NULL

php - 如何在站点主页上显示元描述

php - MYSQL查询两个不同字段的表

mysql - 当我的左连接声明时,有人可以帮助我吗?我认为 mySQL 引擎已损坏

用于 Python 的 Mysql

sql - 如何在 Hive 查询中回顾 7 天

php - 验证浏览器要求和设置

php - 查询数据库时不显示结果