2011-11-22 50 views
1

我有3個不相關的表(每個表都包含不同社交網絡的數據)。每個人都有一個時間字段dated-我已經按小時分組,你可以看到低於(這一個linked_in)從多個表中選擇,但按日期時間字段排序

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 

更新

在實際的數據庫中的數據不被任何PK或FK相關但數據與每個表代表一個用戶通過應用程序註冊用於社交網絡,因此我需要向用戶展示每小時註冊量在所有三個表

更新2

輸出Ø f查詢應該顯示%Y:%m:%d%H以及三個表格每小時的註冊用戶數量(創建的記錄)。每小時返回一個新行(按時間排序)

+0

你可以添加一個示例數據和結果,我沒有得到u需要什麼,以及如何相關數據 –

+0

什麼是你的現狀的支持?它工作嗎?有錯誤嗎?它不會產生你想要的東西嗎?你還試過了什麼? –

+0

數據是unrelated-我將更新問題 –

回答

3

您接近解決方案

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]此解決方案被稱爲'內聯視圖'。你可以谷歌的。這是大多數的數據庫(MySQL和甲骨文MSSQL和等)

+0

查詢應該顯示%Y的輸出中列出的查詢一個錯誤:%M:%d%H和用戶的註冊的量(記錄創建)橫跨三個表是小時..每一個小時返回一個新行(按時間排序) –

+0

這個返回兩個rows-一個與小時= null且總和(t1.column1)= 0,並用一個小時,一個排= 2011: 11:20 17和一個總和(t1.column1)= 146 –

+0

我想我已經得到了它,我加入到子查詢中,也許這可能會工作..? –

相關問題