2009-10-04 47 views
1

我正在運行一個sql查詢以從許多表中獲取基本的詳細信息。按最後更新日期字段排序。它非常棘手,我想如果有一個替代使用UNION子句,而是...我在PHP MYSQL中工作。從不同的表中收集條目的SQL查詢 - 需要UNION的備用

其實我有幾張包含新聞,文章,照片,事件等的表格,需要在一個查詢中收集所有這些表格,以顯示一個簡單的東西 - 什麼是新增加在網站上的東西。

+0

您可以發佈當前查詢的示例(使用UNION)。也請討論一下你不喜歡UNION。 – mjv 2009-10-04 08:07:48

+0

我遇到的問題是表格字段的所有名稱都需要對應於工會中第一個表格的字段名稱,當我從不同表格中獲取詳細信息時,它會有點混亂:( – Ali 2009-10-04 08:54:43

回答

1

也許在PHP而不是MySQL中 - 如果你想要最新的n項目,然後獲取每個新聞項目,文章,照片和事件的最新n,並在PHP中排序(你需要最後一個每個顯然都有n,然後你會在PHP中修剪數據集)。這可能比將UNIONUNION組合起來要容易得多,因爲它們可能有許多不同的數據項。

我不知道UNION的替代方案可以滿足您的要求,並且希望這些提取不會太昂貴。這樣描述這絕對是明智的。

+0

問題是我需要對所有的結果進行分頁 - 所以基本上你可以在任何表格中進行0-n次更新 - 這個想法是讓它看起來沒有什麼問題,只有那些已經更新的條目纔會被收集和顯示出來。 HOw does Facebook btw?!?!? – Ali 2009-10-04 08:28:48

+0

Facebook肯定會緩存它的瘋狂,並且可能會存儲某種更新表格。可悲的是,我不知道Facebook的源代碼 – 2009-10-04 08:35:39

0

如果您使用在查詢中加入您可以從與外鍵相關的不同表中選擇數據。

0

沒有什麼不妥執行UNION(除非你是真的在談論加入對相關型號實體(即那些有外鍵關係)。

,但你可能想使用一個UNION ALL而不僅僅是UNION,如聯盟將執行排序以刪除重複項

0

您可以從另一個角度看這個:?你需要完全更新的信息(當有人進入它應該出現新的信息)

如果沒有,你可以有一個ta以您需要的格式(用作緩存)保存查詢結果,並每隔5分鐘更新一次該表。然後,您的查詢問題變得微不足道,因爲您可以使更新在後臺運行多個更新。

+0

好主意 - 所以你的意思是我應該將更新設置爲crontab作業左右? – Ali 2009-10-04 18:14:08