2016-05-14 62 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的,并且可以显示所有的东西通过日期时间排序。

相关问题