这是我的完整代码:
<?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/