我有两个while
循环和两个查询。
我必须通过其ID将posts
作为DESC进行订购。但是posts循环在另一个查询的循环下。
$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号订购帖子。我只想将帖子ID排序为DESC。我该如何解决?
我认为您可能使这一过程变得过于复杂。如果需要单个数据集,则应使用单个联接的查询。您可以执行一次,然后使用php遍历结果:
select ...
from follows f
inner join posts p on p.user = f.following
where f.follower = :login
order by p.id desc
请注意,我没有将select
子句留空。您应该真正枚举所需的列(并在需要时对它们进行别名以避免冲突),而不要使用*
:这样,结果集的结构就很明确。