多循环中的查询和按最后一个查询的 id 排序

Posted

技术标签:

【中文标题】多循环中的查询和按最后一个查询的 id 排序【英文标题】:Queries in multiple loop and Ordering by id of last query 【发布时间】:2020-02-08 00:33:17 【问题描述】:

我有两个 while 循环和循环中的两个查询。

我必须通过其 ID 将 posts 订购为 DESC。但是帖子循环在另一个查询的循环下。

$follows=$db->prepare("SELECT * FROM follows WHERE follower=:login");
$follows->execute([':login'=>$login['id']]);
while($followed=$follows->fetch()) 

    $posts=$db->prepare("SELECT * FROM posts WHERE user=:followed ORDER BY id DESC");
    $posts->execute([':followed'=>$followed['following']]);
    while($post=$posts->fetch()) 

    ?>

    ...

    <?php  ?>

此方法是根据下表的ID号排序帖子。 我想将帖子订购为 DESC,仅用于帖子的 ID。我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

我认为您可能过于复杂了。如果您需要单个数据集,则应使用单个连接查询。你可以执行一次,然后用 php 循环遍历结果:

select ...
from follows f
inner join posts p on p.user = f.following
where f.follower = :login
order by p.id desc

请注意,我将select 子句留空。你真的应该枚举你想要的列(如果需要,给它们取别名以避免冲突)而不是使用*:这样,结果集的结构是明确的。

【讨论】:

以上是关于多循环中的查询和按最后一个查询的 id 排序的主要内容,如果未能解决你的问题,请参考以下文章

循环中的数据库查询仅返回一个空数组

Java 数据库查询后显示只有最后一行

for循环查询,导致最后返回的list都是最后一个对象的问题

mysql 联合查询 如何查询从表的最后一条记录

Firebase - for循环回调中的嵌套observeSingleEvent查询太多时间更新

如何在sql中插入记录时返回id(id为自动增长)