有人可以帮助我,从两个不同列的表中获取所有数据吗?现在它的工作,但我想按DESC的字段“创建”顺序对所有帖子进行排序。 现在我按ID排序,然后按“创建”字段排序。 这是我的存储库方法
public function getLatestPosts($limit = null)
{
$queryTopics = $this->getEntityManager()
->getConnection()
->prepare('select * from topic order by created DESC');
$queryTopics->execute();
$topics = $queryTopics->fetchAll();
$queryDiary = $this->getEntityManager()
->getConnection()
->prepare('select * from diary order by created DESC');
$queryDiary->execute();
$diaries = $queryDiary->fetchAll();
$posts = array_merge($topics, $diaries);
return $posts;
}
架构bd
TABLE `topic` (
`topic_id`
`topic_title`
`created`
)
TABLE `diary` (
`id`
`title`
`comment`
`height`
`weight`
`created`
)
答案 0 :(得分:0)
我认为最简单的方法是使用array sorting functions in php,它也应该是最快的方式(服务器时间)来实现它
答案 1 :(得分:0)
好的,我会根据一些假设发布答案,因为我不知道你桌子的确切结构。您提到列不同 - 这可能意味着以下一个或全部:
但是,由于您要合并这些结果集,我假设您对它们的处理方式相同 - 例如将它们显示在表中。因此,我们假设两个表具有相同的列数,或者您可以手动选择每个表的列的匹配计数。
换句话说,如果您可以匹配列数,则列名无关紧要,因为您可以执行UNION
or a UNION ALL
。
例如:
SELECT id, name, created FROM topics
UNION
SELECT id, title, created FROM diary
请注意,列标题不必匹配。如果要在此结果集上应用ORDER BY
,只需使用子查询,然后对其进行排序。例如:
SELECT posts.* FROM (
SELECT id, name, created FROM topics
UNION
SELECT id, title, created FROM diary
) AS posts ORDER BY created DESC;
这应该允许你应用你想要的排序标准,不需要在PHP级别上进行数组合并和排序(我假设它会慢一点)。
希望这会有所帮助:)
修改强>
自从我发布此答案后,您已编辑了问题以添加一些说明。每个表中的列数不匹配。
在这种情况下,您有两个选择:
SELECT
每个表中匹配的列数(记住名称不必匹配,只需计数)SELECT
查询中添加假“填充”列来“匹配”列数。第二个选项的示例,使用NULL
填充:
SELECT
topic_id,
topic_title,
NULL AS comment,
NULL AS height,
NULL AS weight,
created
FROM topic
UNION
SELECT
id,
title,
comment,
height,
weight,
created
FROM diary
不可否认,在我看来,这种方式很有点,但它应该适用于您的用例。