简体   繁体   English

如何将这3个查询合并为一个MySQL查询?

[英]How do I combine these 3 queries into one MySQL query?

Each of the below queries gives me exactly what I want as a result individually, but I want to combine them into one query. 下面的每个查询都准确地给出了我想要的结果,但是我想将它们组合成一个查询。

I want to output 3 colums: $row->day, $row->otherPageCount, $row->indexCount 我想输出3个列:$ row-> day,$ row-> otherPageCount,$ row-> indexCount

There is one table tracking that contains all the data. 有一个包含所有数据的表tracking

1). 1)。

SELECT COUNT(`page`) AS indexCount FROM `tracking`
WHERE `page` = 'index.php'
AND `date`
BETWEEN DATE_ADD(NOW(),INTERVAL -30 DAY)
AND NOW()
GROUP BY DATE(`date`)

2). 2)。

SELECT COUNT(`page`) AS otherPageCount FROM `tracking`
WHERE `page` != 'index.php'
AND `date`
BETWEEN DATE_ADD(NOW(),INTERVAL -30 DAY)
AND NOW()
GROUP BY DATE(`date`)

3). 3)。

SELECT DATE(`date`) AS day FROM `tracking`
WHERE `date`
BETWEEN DATE_ADD(NOW(),INTERVAL -30 DAY)
AND NOW()
GROUP BY DATE(`date`)
SELECT DATE(`date`),
       COUNT(`page`) AS indexCount, 
       SUM(`page` = 'index.php') as idx_count, 
       SUM(`page` <> 'index.php') as not_idx_count
FROM `tracking`
WHERE `date` BETWEEN DATE_ADD(NOW(),INTERVAL -30 DAY) AND NOW()
GROUP BY DATE(`date`)

You can use an IF for this: 您可以为此使用IF:

SELECT DATE(`date`), 
  SUM( IF( `page` = 'index.php', 1, 0 ) ) indexCount, 
  SUM( IF( `page` != 'index.php', 1, 0 ) ) otherPageCount
FROM `tracking`
WHERE `date` BETWEEN DATE_ADD(NOW(),INTERVAL -30 DAY) AND NOW()
GROUP BY DATE(`date`)

juergen's answer does the same thing, but makes the IF implicit. Juergen的答案也做同样的事情,但是使IF隐含。 If you understand how it works, that's the better answer. 如果您了解其工作原理,那将是更好的答案。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM