2011-11-22 5 views
1

J'ai 3 tables qui ne sont pas liées (liées que chacune contient des données pour un réseau social différent). Chacun a un champ datetime dated- Je suis déjà groupant par heure comme vous pouvez le voir ci-dessous (celui-ci ci-dessous pour linked_in)sélectionner parmi plusieurs tables mais en les classant par champ datetime

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 

Je voudrais savoir comment faire un total dans les 3 réseaux- les tables pour les trois sont

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 ; 

quelque chose comme ça?

(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 

mise à jour

les données contenues dans la base de données réelle n'est pas lié par un pk ou fk, mais les données sont liées que chaque table représente un utilisateur inscrit à un réseau social par l'application et donc i besoin de montrer le nombre d'utilisateurs enregistrés par heure dans les trois tables

mise à jour 2

la sortie o f la requête doit afficher% Y:% m:% d% H et le nombre d'utilisateurs enregistrés (enregistrements créés) cette heure sur les trois tables .. chaque heure renvoyant une nouvelle ligne (triée par heure)

+0

Pouvez-vous ajouter un exemple de données et de résultats, je n'ai pas obtenu ce dont vous avez besoin et comment les données connexes –

+0

Quelle est votre situation actuelle? Est-ce que ça marche? Y a-t-il une erreur? Ne cède-t-il pas ce que tu veux? Qu'avez-vous essayé d'autre? –

+0

les données sont sans rapport-je vais mettre à jour la question –

Répondre

3

You sont proches de la solution

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 

J'utilise 'hourx' pour éviter les mots de réserve, peut-être pas nécessaire.

J'espère que cela fonctionne.

[AJOUTER] Cette solution est appelée 'vue en ligne'. Vous pouvez google pour cela. Il est pris en charge par la plupart des bases de données (mysql, oracle mssql et etc)

+0

la sortie de la requête doit afficher% Y:% m:% d% H et le nombre d'utilisateurs enregistrés (enregistrements créé) cette heure à travers les trois tables .. chaque heure retournant une nouvelle ligne (ordonnée par le temps) –

+0

cela renvoie deux lignes - une avec heure = null et la somme (t1.column1) = 0 et une autre ligne avec hour = 2011: 11:20 17 et avec une somme (t1.column1) = 146 –

+0

je pense que je l'ai obtenu - j'ai ajouté un groupe dans les sous-requêtes - peut-être que cela pourrait fonctionner ..? –

Questions connexes