2013-03-25 3 views
1

Когда пользователь на моем сайте регистрируется, для статистики выполняется несколько запросов.Ярлык нескольких СУБД Mysql по переплетенным диапазонам дат

SELECT SUM(earnings) FROM stats WHERE date BETWEEN $start_month AND $end_month 
SELECT SUM(earnings) FROM stats WHERE date BETWEEN $start_last_month AND $end_last_month 
SELECT SUM(earnings) FROM stats WHERE date BETWEEN $start_year AND NOW() 
//etc... 

Я чувствую, что я «мошенничество» двигатель Mysql, задавая его SUM всего эти на отдельных запросах. Например, когда он рассчитывает доходы за годы, он также рассчитывает ежемесячные доходы в этом ... но тогда я все равно запрошу его.

Есть ли лучший способ получить SUMS для нескольких диапазонов дат, которые переплетаются?

ответ

3

На самом деле вы можете использовать CASE для расчета earning.

SELECT SUM(CASE WHEN date BETWEEN $start_month AND $end_month THEN earnings ELSE 0 END), 
     SUM(CASE WHEN date BETWEEN $start_last_month AND $end_last_month THEN earnings ELSE 0 END), 
     SUM(CASE WHEN date BETWEEN $start_year AND NOW() THEN earnings ELSE 0 END) 
FROM stats 
+0

Не могли бы вы объяснить, почему это работает лучше, чем отдельные запросы? Спасибо :) – hellohellosharp

+0

Это меньше раундов между PHP и MySQL; каждый из этих круговых поездок имеет на это расходы. – TML

+0

Является ли этот стандарт SQL или mySQL конкретным? – fredrik

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