2016-05-14 64 views
0

我的問題很簡單。如何在一個頁面上顯示三個表格中的內容,並一起按日期排序。三個不同的表格(sql)顯示爲一個內容

這是一個博客,我有像文章,狀態和報價職位。

文章 - ID,標題,圖片,文字,類型,日期時間(PHP - 時間())

狀態 - ID,標題,文本,類型,日期時間(PHP - 時間())

報價 - 編號,報價,作者,類型,日期時間(PHP - 時間())

我需要出示由日期時間訂購頁面上的內容。然後,我可以通過帖子類型更改html/css。

這將是更好的連接表或在數組中顯示它?

感謝您的任何幫助。

回答

1

如果您想要在MySQL中進行排序,您需要統一來自三個表的字段,並執行UNION ALL而不是JOIN。 當你有三個關係時,你可以使用連接,只要我可以看到這些表是不相關的。

您的其他選擇是合併來自數組中這三個查詢的結果。

$merged = array(); 

foreach($articles as $k => $article){ 
    $merged[$article['Datetime']] = array('table' => 'articles', 'id' => $k); 
} 
foreach($statuses as $k => $statuse){ 
    $merged[$statuse['Datetime']] = array('table' => 'statuses', 'id' => $k); 
}foreach($quotes as $k => $quote){ 
    $merged[$quote['Datetime']] = array('table' => 'quotes', 'id' => $k); 
} 

ksort($merged); 

foreach ($merged as $key => $value) 
{ 
    $arr = $$value['table']; 
    echo $arr[$value['id']]; 
} 

當然,你可以做一些重構,但這段代碼總之顯示瞭如何做到這一點。

+0

非常感謝你!我從你的Php腳本中學到了一些新東西,但是我用Sql創建了它。我從來沒有聽過UNION ALL的消息。現在非常簡單。 :) – user1468448

+0

我還有一個問題。如果我想加載這個UNION ALL sql中的所有內容,那麼不可能在所有表中顯示不相同的列。我怎樣才能得到這個內容沒有更多的sqls? – user1468448

+0

這應該有助於你怎麼看? SELECT列1,列2,'''列3'FROM表a UNION SELECT列1,列2,列3 FROM表b – user1468448

1

你可以試試這個query..but我已經全部三個表

SELECT a.Id,a.Title,a.Photo,a.Text, 
a.Type,a.DateTime,s.Title,s.Text,q.Quote,q.Author,q.Type 
FROM ARTICLE a 
INNER JOIN STATUS s 
ON a.Type = b.Type 
INNER JOIN QUOTE q 
ON b.Type = q.Type 
GROUP BY a.Type 
ORDER BY a.Datetime ASC; 

在作出假設類型是常見的。如果類型是不會放棄的結果,那麼使用ID在「ON」狀態 因爲,表結構沒有明確定義。

+0

謝謝你的回答,我知道我沒有在我的問題中定義更多的東西。類型爲1,2或3.每種類型的帖子對於不同的html/css風格都有不同的類型。 :) – user1468448

0

對於那些誰將爲simmilar解決搜索我創造了它這種簡單的方法:

SELECT id, datetime FROM article 
UNION ALL 
SELECT id, datetime FROM status 
UNION ALL 
SELECT id, datetime FROM quote 
ORDER BY datetime ASC; 

現在我知道帖子的ID的,並且可以顯示所有的東西通過日期時間排序。

相關問題