三个不同的表(sql)显示的内容相同


Three different tables (sql) show like one content

我的问题很简单。如何在一页上显示按日期排序的三个表中的内容。

这是一个博客,我有文章,法规和报价。

文章-Id、标题、照片、文本、类型、日期时间(php-time())

STATUS-Id、标题、文本、类型、日期时间(php-time())

QUOTE-Id,QUOTE,Author,Type,Datetime(php-time())

我需要在页面上显示按Datetime排序的内容。然后我可以根据帖子的类型更改html/css。

最好是联接表还是在Array中显示它?

谢谢你的帮助。

如果你想在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']]; 
}

当然,您可以进行一些重构,但这个片段简单地展示了如何进行重构。

您可以尝试此查询。。但我假设类型在的所有三个表中都是常见的

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;

如果类型没有给出结果,则在"ON"条件下使用id因为,表结构并没有被正确定义。

对于那些将搜索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,可以显示按日期时间排序的所有内容。