mysql - 如何从多个表中按最新日期记录排序?

标签 mysql sql

这是我的完整代码:

<?php $sid = $_SESSION['userid'];
$stmt = $pdo->prepare("
    SELECT tableA.*, tableB.*, tableC.*
    FROM tableA
    LEFT JOIN tableB
    ON tableA.tableAuserid = tableB.tableAuserid
    LEFT JOIN tableC
    ON tableA.tableAuserid = tableC.tableCuserid
    WHERE tableA.tableAuserid = ?
    ;
");
$stmt->bindParam(1, $sid, PDO::PARAM_INT);
$stmt->execute();
$columns = $stmt->fetchAll();

foreach($columns as $column):
$tableAdate = $column['tableAdate'];
$tableBdate = $column['tableBdate'];
$tableCdate = $column['tableCdate'];
    if ($tableAdate): ?>
        <div><?php echo $tableAdate; ?></div>
    <?php endif;
    if ($tableBdate): ?>
        <div><?php echo $tableBdate; ?></div>
    <?php endif;
    if ($tableCdate): ?>
        <div><?php echo $tableCdate; ?></div>
    <?php endif;
endforeach; ?>

我的 3 个数据库表是:tableA:

tableAid | tableAuserid | tableAdate
    1    |     44       | 2018-07-13 11:09:11
    2    |     44       | 2019-05-23 01:21:29

表B:

tableBid | tableBuserid | tableBdate
    1    |     44       | 2019-08-11 17:41:01

tableC:

tableCid | tableCuserid | tableCdate
    1    |     44       | 2014-03-14 09:18:16

这是当前从我的代码中回显的结果:

2018-07-13 11:09:11
2019-08-11 17:41:01
2014-03-14 09:18:16
2019-05-23 01:21:29
2019-08-11 17:41:01
2014-03-14 09:18:16

但这就是我想要从代码中实现的结果:

2019-08-11 17:41:01 (tableB)
2019-05-23 01:21:29 (tableA)
2018-07-13 11:09:11 (tableA)
2014-03-14 09:18:16 (tableC)

基本上每条记录都必须被检索,没有重复值,结果必须由$_SESSION['userid']变量确定,SQL代码的ORDER排列必须按最新日期所有 3 个表中组合的所有日期的 DESC。我该如何实现这个目标?

最佳答案

感觉我错过了问题的一些细微差别,但也许没有。有很多方法可以实现这一目标。

以下UNION允许相当大的灵活性,即能够细化每个表的标准,并且仍然在 SQL 方面进行排序。

SELECT tId, tUserId, tDate FROM tableA WHERE tUserId = ?
UNION ALL 
SELECT tId, tUserId, tDate FROM tableB WHERE tUserId = ?
UNION ALL
SELECT tId, tUserId, tDate FROM tableC WHERE tUserId = ?
ORDER BY tDate DESC;

说实话,我写的并不多。也许很大程度上是因为 ORM(需要研究的东西),或者正如谈话所倾向于的那样,设计。您对 left join 的第一次使用可能是我编写的 95% 查询的格式。不管怎样,没有理由不使用联合来满足某些报告需求。甚至可以创建一个 view *喘息*

关于mysql - 如何从多个表中按最新日期记录排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57699568/

相关文章:

mysql - Rails .where 查询不起作用

mysql - 为没有任何解锁组的用户标记

SQL Server 2005 错误 - ""MAX“不是可识别的表提示选项”

sql - 如何从包含自引用外键的表中删除所有数据

sql - 使用 Oracle SQL 选择生日在给定范围内的员工

mysql - 选择连接表中的字段在每一行中都相同的行

mysql - 计算三个表连接中两个独立的 group by 子句的数量

mysql - SQL 聚合函数 where 子句

mysql - 组合来自不同数据库的 2 个 MySQL 查询

mysql - 如何让Mysql数据库支持阿拉伯语?