問:一個表中有兩個字段:id,父id,如何求出父id下面的所有id呢?
建表:
CREATE table test (
id int(4) ,
parent_id int(4)
);
添加數據:
嘗試一:
SELECT parent_id,id from test GROUP BY parent_id
結果:
顯然是錯誤的,每一組只顯示了一條數據, 沒達到我們的目的。
經查閱資料發現:使用group_concat()可以將group by產生的同一個分組中的值連接起來,返回一個字符串結果。
嘗試二:
SELECT parent_id,GROUP_CONCAT(id) from test GROUP BY parent_id
結果:
成功顯示出了所有的子id。
拓展
group_concat()函數完整語法如下:
group_concat([DISTINCT] 要連接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])
示例:SELECT * FROM testgroup
表結構與數據如上
現在的需求就是每個id為一行 在前台每行顯示該id所有分數
- SELECT id,GROUP_CONCAT(score) FROM testgroup GROUP BY id
可以看到 根據id 分成了三行 並且分數默認用 逗號 分割 但是有每個id有重復數據
接下來去重:
- SELECT id,GROUP_CONCAT(DISTINCT score) FROM testgroup GROUP BY id
排序:
- SELECT id,GROUP_CONCAT(DISTINCT score ORDER BY score DESC) as result FROM testgroup GROUP BY id
最后可以設置分隔符:
- SELECT id,GROUP_CONCAT(DISTINCT score ORDER BY score DESC SEPARATOR '-') as result FROM testgroup GROUP BY id