php - sql问题(店铺 商家 活动的sql)
黄舟
黄舟 2017-04-11 10:19:46
[PHP讨论组]

3张表

店铺表shop
shopid shopname
1      水果店
2      衣服店
3      粮食店

活动表activity
aid    shopid    actname
1        1         送苹果活动
2        1         送橘子活动
3        2         送衬衫活动
4        2         送鞋子活动

商户表user
商户id   店铺id    商户等级
uid      shopid    level
87       1         高级商户
88       2         中级商户
89       3         低级用户

需要找到有活动的店铺,然后显示信息,最终结果
水果店 高级用户 有送苹果和送橘子活动
衣服店 中级用户 有送衬衫和送鞋子活动

自己的思路:
1.shop表inner join activity表  group by shopid 找到有活动的店铺
shoplist = select shopid inner join activity on a.shopid=s.shopid
2.然后遍历shoplist
$res = array();
for($shoplist as $val){
    $info = select * from user left join activity on u.shopid=a.shopid where shopid=$val['shopid'] //
    $info = array(
        array(level=>'高级用户',actname='送苹果活动'),
        array(level=>'高级用户',actname='送橘子活动'),
    );
    处理$info 
    最后店铺信息为 $res[] = array('高级用户,送苹果活动,送橘子活动');
}

问题:觉得这样做有点多余,找店铺inner join了活动表,获取活动信息又left join了活动表,能不能直接用一条sql解决这个问题

总结:group_concat把同一组的内容合并在一起

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(1)
怪我咯
select shopname,level,group_concat(actname) from(select shop.shopname,user.level,activity.actname from shop inner join user on shop.shopid = user.shopid inner join activity on shop.shopid = activity.shopid) group by shopname,level
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号