V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
happylty
V2EX  ›  PHP

如何将输出变量值设置为多个结果?

  •  
  •   happylty · 2018-12-07 16:30:34 +08:00 · 3232 次点击
    这是一个创建于 1959 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在用 phpmailer 做一个到时间自动发送邮件的程序。有个需求就是在数据库中有 name 会有重复的,但是 class 不会重复但是要在输出结果变量中检测到 name 重复的就在结果变量中有多个 class.

    数据库:
    name class teacher
    lee C1 Gebilaowang
    lee C2 Gebilaozhang

    邮件内容:
    亲爱的 %name%,你的课程有%class%,老师是 %teacher%

    实际体验效果是会发送两封邮件:
    亲爱的 lee,你的课程有 C1,老师是 Gebilaowang
    亲爱的 lee,你的课程有 C2,老师是 Gebilaozhang

    怎么合并为一封邮件:
    亲爱的 lee,你的课程有 C1,C2,老师是 Gebilaowang,Gebilaozhang

    请大神赐教。
    第 1 条附言  ·  2018-12-07 19:07:36 +08:00
    还有个问题就是
    邮件会在每个 teacher 上面进行链接到个人页面,例如
    <a href="https://www.qq.com/%url%/">%teacher%</a>
    但是如果用了 GROUP_CONCAT 就会变成
    <a href="https://www.qq.com/laowang,laozhang/">gebilaowang,gebilaozhang</a>
    这就嗝儿屁了
    13 条回复    2018-12-24 18:28:57 +08:00
    breadenglish
        1
    breadenglish  
       2018-12-07 16:48:05 +08:00
    GROUP_CONCAT
    DavidNineRoc
        2
    DavidNineRoc  
       2018-12-07 16:48:41 +08:00
    直接上图,如果不用框架,自己装一个 collection 包
    ![]( )
    ![]( )
    markgor
        3
    markgor  
       2018-12-07 17:25:10 +08:00   ❤️ 1
    SELECT CONCAT('亲爱的',`name`,'你的课程有',GROUP_CONCAT(`class`),',','老师是',GROUP_CONCAT(`teacher`)) as msg FROM tbl WHERE `name` = 'lee' GROUP BY `name`;
    happylty
        4
    happylty  
    OP
       2018-12-07 17:34:42 +08:00
    @breadenglish #1
    @DavidNineRoc #2
    还有个障碍就是,如果有网址该怎么办?
    happylty
        5
    happylty  
    OP
       2018-12-07 17:55:23 +08:00
    @markgor #3 你这个怎么把字符串也给选中了?数据库里没这些玩意儿啊
    hahastudio
        6
    hahastudio  
       2018-12-07 18:05:34 +08:00
    如果是实际项目的话,我觉得应该是:
    亲爱的 %name%,你当前已参加如下课程:

    |课程|老师|
    |----|----|
    |%class%|%teacher%|

    除非你的那边是,如果选了 2 门课程,会是这 2 门课程的老师联合授课,不然用户怎么知道哪个课是哪个老师
    happylty
        7
    happylty  
    OP
       2018-12-07 18:08:36 +08:00
    @hahastudio #6 不是工作项目,我这是学习的过程中出现的问题,相当于毕设前的小作品吧
    happylty
        8
    happylty  
    OP
       2018-12-07 18:22:49 +08:00
    @markgor #3 还有个问题就是
    老师介绍地址<a herf="www.qq.com/?',GROUP_CONCAT(`teacher`),'/></a>')
    这样就变成 http://www.qq.com/?gebilaowang,gebilaozhang/ 了。。。
    这个怎么处理?
    jininij
        9
    jininij  
       2018-12-07 18:51:25 +08:00 via iPhone
    不要使用 group_concat。被坑过,折腾了很久。
    如果合并的项太多,输出的字符串会被截断,不会有任何错误。
    本来是个非常棒的函数,可以减少很多次查询,不知道为什么要有这个奇怪的设定。
    happylty
        10
    happylty  
    OP
       2018-12-07 18:54:19 +08:00
    @jininij #9 那我用什么?。。。我不懂啊所以来问的,你把我唯一的希望给掐灭了。。。
    markgor
        11
    markgor  
       2018-12-24 18:21:01 +08:00   ❤️ 1
    @happylty 我看你一开始没这个需求,所以才给这句你,直接一句出结果,如果你还要加这些进去,那直接查询数据库后用 PHP 组合下就可以了,没什么困难吧....
    happylty
        12
    happylty  
    OP
       2018-12-24 18:25:16 +08:00
    @markgor #11 已经解决了,谢谢。
    markgor
        13
    markgor  
       2018-12-24 18:28:57 +08:00
    @jininij 那是 mysql.cnf 里面设置的,默认好像 1000 字符截断,你可以通过修改 cnf 文件,或者通过 set session 的方式来改变这个参数。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1465 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:16 · PVG 01:16 · LAX 10:16 · JFK 13:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.