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、部門に対するランクごとに個別の行を使用して、名前を付けて機能している3つの列を返します。

rank | name | department

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

私が必要としているのは、これらすべての情報を1つの行で取得することです。これは、1つの行のみを返す、別のより大きなクエリの一部として情報を取得する必要があるためです。

group_concatについて考え、2つの列を作成しました。1つはmod用、もう1つはadm用です。複数のmodがある場合(特定の例では75、92)、それらはコンマで区切られます。

mod  | adm   

Steven Smith, Jeremy Roy   |  Vincent Jones

はっきりしましたか?友よありがとう。

4

2 に答える 2

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 これでこのクエリの問題は解決しますが、2 つのクエリをまとめる必要があります。おそらく私はこれのために新しい記事を作成します。

于 2011-02-28T13:39:44.247 に答える
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 に答える