首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql逐行选择组

mysql逐行选择组
EN

Stack Overflow用户
提问于 2015-07-24 10:57:56
回答 1查看 25关注 0票数 0

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

代码语言:javascript
运行
复制
page_id    banner_id   
1             1   
1             2    
2             1   
2             2  
2             3   

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

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

但是如果我没有GROUP BY banner_id,那么顺序是正确的,但是我得到了相同横幅的多个实例。(显然)

如果我执行GROUP BY banner_id (虽然标题可能连接到当前页面),则为每个横幅返回的行可能不一定返回该页面id。后面会列出来的。

代码语言:javascript
运行
复制
$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 ";   
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-24 11:00:33

我觉得你不需要group by

代码语言:javascript
运行
复制
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没有副本,也可以这样做:

代码语言:javascript
运行
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31608814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档