выбрать из нескольких таблиц, но упорядочение по полю даты и времени - PullRequest
1 голос
/ 22 ноября 2011

У меня есть 3 несвязанные таблицы (связанные, каждая из которых содержит данные для разных социальных сетей).У каждого есть поле даты и времени - я уже сгруппировался по часам, как вы можете видеть ниже (этот ниже для связанный_)

SELECT count(*), date_format(dated, '%Y:%m:%d %H') as hour
FROM upd8r_linked_in_accts
WHERE CAST(dated AS DATE) = '".$start_date."'
GROUP BY hour

Я хотел бы знать, как сделать общее количество во всех 3 сетях -таблицы для этих трех:

CREATE TABLE IF NOT EXISTS `upd8r_facebook_accts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `owner_id` varchar(50) NOT NULL,
  `user_id` int(11) NOT NULL,
  `fb_id` bigint(30) NOT NULL,
  `dated` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=80 ;

CREATE TABLE IF NOT EXISTS `upd8r_linked_in_accts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `owner_id` varchar(50) NOT NULL,
  `user_id` int(11) NOT NULL,
  `linked_in` varchar(200) NOT NULL,
  `oauth_secret` varchar(100) NOT NULL,
  `first_count` int(11) NOT NULL,
  `second_count` int(11) NOT NULL,
  `dated` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=200 ;

CREATE TABLE IF NOT EXISTS `upd8r_twitter_accts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `owner_id` varchar(50) NOT NULL,
  `user_id` int(11) NOT NULL,
  `twitter` varchar(200) NOT NULL,
  `twitter_secret` varchar(100) NOT NULL,
  `dated` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;

как-то так?

(SELECT count(*), date_format(dated, '%Y:%m:%d %H') as hour
 FROM upd8r_linked_in_accts 
 WHERE CAST(dated AS DATE) = '".$start_date."')
UNION ALL
(SELECT count(*), date_format(dated, '%Y:%m:%d %H') as hour
 FROM upd8r_facebook_accts
 WHERE CAST(dated AS DATE) = '".$start_date."')
UNION ALL
(SELECT count(*), date_format(dated, '%Y:%m:%d %H') as hour 
 FROM upd8r_twitter_accts 
 WHERE CAST(dated AS DATE) = '".$start_date."')
UNION ALL
GROUP BY hour

update

данные в фактической базе данных не связанылюбым ПК или ФК, но данные связаны с тем, что каждая таблица представляет пользователя, зарегистрированного в социальной сети через приложение, и поэтому мне нужно показать количество пользователей, зарегистрированных в час во всех трех таблицах

обновление 2

выходные данные запроса должны отображать% Y:% m:% d% H и количество зарегистрированных пользователей (созданных записей) за этот час в трех таблицах ... каждый час, возвращаяновый ряд (по времени)

1 Ответ

3 голосов
/ 22 ноября 2011

Вы близки к решению

select t1.hourx, sum(t1.column1)
from (
  (
    SELECT count(*) as column1, date_format(dated, '%Y:%m:%d %H') as hourx 
    FROM upd8r_linked_in_accts 
    WHERE CAST(dated AS DATE) = '".$start_date."'
    GROUP BY hourx 
  ) 
  UNION ALL 
  (
    SELECT count(*) as column1, date_format(dated, '%Y:%m:%d %H') as hourx 
    FROM upd8r_facebook_accts 
    WHERE CAST(dated AS DATE) = '".$start_date."'
    GROUP BY hourx
  ) 
  UNION ALL 
  (
    SELECT count(*) as column1, date_format(dated, '%Y:%m:%d %H') as hourx
    FROM upd8r_twitter_accts 
    WHERE CAST(dated AS DATE) = '".$start_date."'
    GROUP BY hourx
  ) 
) t1
GROUP BY t1.hourx

Я использую «час», чтобы избежать запасных слов, возможно, нет необходимости.

Надеюсь, это сработает.

[ADD] Это решение называется «встроенным представлением». Вы можете Google для этого. Поддерживается большинством баз данных (mysql, oracle mssql и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...