2013-10-10 4 views
0

Каждый из нижеперечисленных запросов дает мне именно то, что я хочу в результате по отдельности, но я хочу объединить их в один запрос.Как объединить эти 3 запроса в один запрос MySQL?

Я хочу вывести 3 colums: $ row-> день, $ row-> otherPageCount, $ row-> indexCount

Существует одна таблица tracking, который содержит все данные.

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).

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).

SELECT DATE(`date`) AS day FROM `tracking` 
WHERE `date` 
BETWEEN DATE_ADD(NOW(),INTERVAL -30 DAY) 
AND NOW() 
GROUP BY DATE(`date`) 

ответ

4
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`) 
2

Вы можете использовать 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 делает то же самое, но делает IF неявным. Если вы понимаете, как это работает, это лучший ответ.

Смежные вопросы