2010-03-05 36 views
0

比方說,我有一個screenshots表和replies表。所以:每個屏幕截圖可以有多個回覆(一對多)。現在,我想創建一個兩者結合的時間表,但實際上,它們非常不相關(在結構上)。時間軸從2相關表

如何從兩個表中選擇數據,按其發佈時間排序,降序排列;例如,我可以發佈帖子,發表一些評論,然後發佈另一篇帖子;因爲那將是時間線的發生?

通常從兩者合併選擇表格;但我不希望這種情況發生。關於這個問題,我還需要表格來區分。這裏的結構表...

-- 
-- Table structure for table `screenshots` 
-- 

CREATE TABLE IF NOT EXISTS `screenshots` (
    `id` int(11) NOT NULL auto_increment, 
    `user` int(11) NOT NULL, 
    `description` text NOT NULL, 
    `time` timestamp NOT NULL default CURRENT_TIMESTAMP, 
    `ext` varchar(4) NOT NULL default 'png', 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ; 

-- -------------------------------------------------------- 

-- 
-- Table structure for table `screenshot_replies` 
-- 

CREATE TABLE IF NOT EXISTS `screenshot_replies` (
    `id` int(11) NOT NULL auto_increment, 
    `user` int(11) NOT NULL, 
    `parent` int(11) NOT NULL, 
    `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, 
    `text` text NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ; 

注:我意識到這可能是this question重複,但我沒有發現有該解決方案爲我工作。

在此先感謝! :)

回答

4

你應該在這種情況下使用UNION

(SELECT id, time, 'screenshots' as tableName FROM screenshots) 
UNION 
(SELECT id, time, 'replies' as tableName FROM screenshot_replies) 
ORDER BY time ASC 

您可以通過在PHP
使用mysql_tablename函數獲取一個字段的表名,您可指示表名作爲列結果集

+0

我會玩這個,看看它是如何適合的 - 到目前爲止它正在組織行的方式有幾個缺點 - 謝謝!如果一切都變好,我會將其標記爲答案:) – casraf 2010-03-05 11:57:04

+0

剛看了一下mysql_tablename,似乎被棄用?另外,我將結果緩存在一個數組中,我認爲它不會起作用 – casraf 2010-03-05 12:12:35

+2

使用「union all」而不是「union」來避免隱式的額外「distinct」步驟 – araqnid 2010-03-05 13:40:53

1

每當我遇到像這樣的問題時,您發現無法執行某些操作,因爲您無法構建將提取數據的查詢,我必須開始想知道您是否擁有正確的數據模式L·

從你想要提取的數據開始,然後建立一個允許這樣做的模型,而不是相反,並且從長遠來看你會發現它更容易,也可能更快的性能和更好的靈活性。

看着這些表,我不得不問爲什麼有兩個呢?出了什麼問題:

 
CREATE TABLE IF NOT EXISTS `screenshots` (
    `id` int(11) NOT NULL auto_increment, 
    `user` int(11) NOT NULL, 
    `description` text NOT NULL, 
    `time` timestamp NOT NULL default CURRENT_TIMESTAMP, 
    `ext` varchar(4) default 'png', 
    `parent` int(11), 
    `text` text, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

這將讓你做你想做的,很容易告訴如果它是一個截屏(如果分機設置),回覆(如果家長設置)或...因爲模型現在允許它...這是一個答覆的截圖!

+0

我的需求並不需要這個結構,哈哈:P我不需要截圖這是一個回覆,而且我更容易分開組織它們。 – casraf 2010-03-05 11:54:00

+0

噢,在我決定爲RSS提要製作一個連接的時間線之前,我的結構非常棒。該網站本身功能和工作幾乎完美無瑕,這只是我想給它的一個提升。 – casraf 2010-03-05 12:09:27