2014-10-09 2 views
1

Я создаю ежемесячную систему статистики. На первой странице системы отображается либо «+», если не было задано никаких статистических данных за определенный месяц и [капли-глификон], если была установлена ​​статистика.MySQL: Определите, существует ли дата в нескольких таблицах

Титульный лист похож на этот (карандаш глифа заменены трубы)

Year 2014 
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
+ + + | + | | | | | | | 

Year 2013 
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 
+ + + + + | | | + | + | 

... и так далее.

Простой достаточно.

Но проблема в том, что я не просто проверяю одну таблицу, чтобы увидеть, соответствует ли ее поле «month_id» месяцу; Я проверяю 7 разных таблиц. Все 7 таблиц имеют общее поле «month_id».

Если ANY из 7 таблиц содержит месяц_ид, который соответствует текущему месяцу, должен отображаться символ-карандаш. Если нет, то «+».

Мне не нужна помощь в создании HTML или PHP для этого, просто совет, если есть эффективный способ запроса к базе данных.

+0

Эта ссылка может быть полезна http://stackoverflow.com/questions/14222605/complex-sql-query-checking-column-values-in-multiple-tables –

ответ

2

Вот одно решение:

SELECT 
    (SELECT COUNT(*) FROM table1 WHERE month_id = MONTH(CURDATE())) 
    + (SELECT COUNT(*) FROM table2 WHERE month_id = MONTH(CURDATE())) 
    + (SELECT COUNT(*) FROM table3 WHERE month_id = MONTH(CURDATE())) 
    + (SELECT COUNT(*) FROM table4 WHERE month_id = MONTH(CURDATE())) 
    + (SELECT COUNT(*) FROM table5 WHERE month_id = MONTH(CURDATE())) 
    + (SELECT COUNT(*) FROM table6 WHERE month_id = MONTH(CURDATE())) 
    + (SELECT COUNT(*) FROM table7 WHERE month_id = MONTH(CURDATE())); 

Если результат больше 0, то есть по крайней мере один соответствующий ряд из семи таблиц.