gpt4 book ai didi

mysql 选择 groupby 行

转载 作者:行者123 更新时间:2023-11-29 12:05:12 25 4
gpt4 key购买 nike

我已经看到了类似问题的一些很好的答案,但我似乎仍然无法解决我的问题。我有一个名为 page_to_banner 的表,如下所示

page_id    banner_id   
1 1
1 2
2 1
2 2
2 3

在管理区域中,编辑页面(page.php)

我想首先列出连接到此页面的所有横幅,然后列出所有其他横幅。

但是,如果我不GROUP BYbanner_id,那么顺序是正确的,但我会得到同一横幅的多个实例。 (显然)

如果我执行GROUP BYbanner_id,尽管横幅可能连接到当前页面,但为每个横幅返回的行可能不一定返回该页面 ID。之后将列出。

$sql = " SELECT * FROM banner AS b ";
$sql.= " LEFT JOIN page_to_banner AS p2b on(b.banner_id=p2b.banner_id) ";
$sql.= " GROUP BY p2b.banner_id";
$sql.= " ORDER BY p2s.page_id ='" . $page_id . "' ,b.date_modified ";

最佳答案

我认为您不需要分组依据:

select b.*
from banners b
order by (exists (select 1
from page_to_banner p2b
where p2b.banner_id = b.banner_id and
p2b = $page_id
)
) desc,
b.date_modified;

我不鼓励使用group by,因为这只会产生额外的开销。

如果page_to_banner没有重复项,您还可以执行以下操作:

select b.*
from banner b left join
page_to_banner p2b
on p2b.banner_id = b.banner_id and p2b.page_id = $page_id
order by (p2b.page_id is null) desc, b.date_modified;

关于mysql 选择 groupby 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31608814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com