1

我有以下查询:

SELECT a.rank AS rank, concat( m.prenom, ' ', m.nom ) AS name, d.department
FROM `0_area` AS a
LEFT JOIN 0_member AS m ON a.user_id = m.id
LEFT JOIN 0_depart AS d ON a.user_id = d.user_id
WHERE a.sec_id = 2
AND (a.rank = 'mod' OR a.rank = 'adm')
AND d.department IN ( 75, 92 )

上面的查询返回给我三列,命名rank | name | department并且它正在工作,针对一个部门的每个等级都有一个单独的行。

rank | name | department

mod  |  Steven Smith   |  75   
mod  |  Jeremy Roy     |  92  
adm  |  Vincent Jones  |  75  

我需要的是在一行中获取所有这些信息,因为我需要将它作为另一个更大查询的一部分,即只返回一行。

我想到了 group_concat,并有两列,一列用于 mod,一列用于 adm。如果有多个模组(在给定示例中为 75、92),它们将用逗号分隔。

mod  | adm   

Steven Smith, Jeremy Roy   |  Vincent Jones

我说清楚了吗?谢谢朋友。

4

2 回答 2

0

就像是:

SELECT
    a.rank AS rank,
    concat( m.prenom, ' ', m.nom ) AS name,
    GROUP_CONCAT(d.department ORDER BY d.department ASC SEPARATOR '|')
FROM
    `0_area` AS a
LEFT JOIN
    0_member AS m
ON
    a.user_id = m.id
LEFT JOIN
    0_depart AS d
ON
    a.user_id = d.user_id
WHERE
    a.sec_id = 2
AND
    (a.rank = 'mod' OR a.rank = 'adm')
AND
    d.department IN ( 75, 92 )
GROUP BY
    a.rank
于 2011-02-28T12:50:47.837 回答
0

一些谷歌搜索告诉我,我需要这个 sql:

SELECT 
GROUP_CONCAT( if( a.rank='mod', concat( m.prenom, ' ', m.nom ), '' ) ) AS 'mod', 
GROUP_CONCAT( if( a.rank='adm', concat( m.prenom, ' ', m.nom ), '' ) ) AS 'adm'
FROM `0_area` AS a
LEFT JOIN 0_member AS m ON a.user_id = m.id
LEFT JOIN 0_depart AS d ON a.user_id = d.user_id
WHERE a.sec_id =2
AND (a.rank = 'mod' OR a.rank = 'adm' )
AND d.department IN ( 75, 92 )
GROUP BY a.sec_id

@ToonMariner 这解决了这个查询的问题,但是,我仍然需要将两个查询放在一起。可能我会为此创建一个新帖子。

于 2011-02-28T13:39:44.247 回答