代码之家  ›  专栏  ›  技术社区  ›  Glycerine

mysql是否根据单个字段将多行合并成一行?

  •  0
  • Glycerine  · 技术社区  · 14 年前

    这是一个在输出时将多行合并为一行的问题:

    我有三张表,一张表(Tablea)包含用户名和电子邮件等用户数据,另一张表(Tableb)标记他们是否希望收到电子邮件或短信通知,最后一张表(Tablec)记录他们需要的四种通知类型。

    表A和表B对于每个用户都有单独的行,但是表C最多可以有4个条目。

    是否可以将表C的多个条目具体化为一个单行返回,以及其他两个表中的其他数据。也许在行中构建某种逗号分隔的字段?

    我目前将此作为我的MySQL查询:

    SELECT
    ppf.page_id,
    prv.`name`,
    prv.surname,
    prv.email,
    prv.mobile,
    ppf.email,
    ppf.sms,
    page_profile_noticetypes.noticetype
    FROM
    page_registration_value AS prv
    Inner Join page_profile_value AS ppf ON prv.page_id = ppf.user
    Inner Join page_profile_noticetypes ON page_profile_noticetypes.page_id = ppf.page_id
    WHERE ppf.sms = 1 OR ppf.email = 1
    

    以下是我得到的一些屏幕截图,然后是我想要的(或类似的东西)


    What I get image http://strangemother.com/ex1.JPG


    What I would like http://strangemother.com/ex2.JPG


    谢谢。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Glycerine    14 年前

    @Itsadok回答了-结果:

    SELECT
    ppf.page_id,
    prv.`name`,
    prv.surname,
    prv.email,
    prv.mobile,
    ppf.email,
    ppf.sms,
    GROUP_CONCAT(page_profile_noticetypes.noticetype)
    FROM
    page_registration_value AS prv
    Inner Join page_profile_value AS ppf ON prv.page_id = ppf.user
    Inner Join page_profile_noticetypes ON page_profile_noticetypes.page_id = ppf.page_id
    WHERE ppf.sms = 1 OR ppf.email = 1
    GROUP BY prv.email