如何通过mysql连接一行中的多行?
示例:
学生表
Sno.| Name | Subjects
1. | ABC | English
2. | ABC | Mathematics
3. | ABC | Science
4. | FMC | French
5. | ABC | Russian
6. | JBC | French现在我希望它是这样的格式
Sno.| Name | Sub1 | Sub2 | Sub3 | Sub4 |
1. | ABC | Eng | Maths| Science| Russian
2. | FMC | French| Null| Null | Null
3. | JBC | French| Null | Null | Null我不确定到底该怎么做?我应该创建一个视图还是一个表?
我想能看到风景就可以了。
发布于 2012-07-17 03:59:40
我同意其他的答案,GROUP_CONCAT和PHP一起拆分逗号分隔值可能是最好的方法,但是如果你出于任何其他原因需要通过Pure SQL建议的输出,我会建议以下方法之一。
SELECT t1.Name,
MIN(t1.Subject) AS Sub1,
MIN(t2.Subject) AS Sub2,
MIN(t3.Subject) AS Sub3,
MIN(t4.Subject) AS Sub4
FROM Students t1
LEFT JOIN Students T2
ON t1.Name = t2.Name
AND t2.Subject > t1.Subject
LEFT JOIN Students T3
ON t2.Name = t3.Name
AND t3.Subject > t2.Subject
LEFT JOIN Students T4
ON t3.Name = t4.Name
AND t4.Subject > t3.Subject
GROUP BY t1.Name;SELECT Name,
MAX(IF(RowNum = 1,Subject, NULL)) AS Sub1,
MAX(IF(RowNum = 2,Subject, NULL)) AS Sub2,
MAX(IF(RowNum = 3,Subject, NULL)) AS Sub3,
MAX(IF(RowNum = 4,Subject, NULL)) AS Sub4
FROM ( SELECT Name,
Subject,
@r:= IF(@Name = Name, @r + 1, 1) AS RowNum,
@Name:= Name AS Name2
FROM Students,
(SELECT @Name:='') n,
(SELECT @r:= 0) r
ORDER BY Name, Sno
) t
GROUP BY Name发布于 2012-07-17 02:02:57
使用以下查询,获取姓名和他/她的主题。
SELECT Name, GROUP_CONCAT(Subjects) AS List
FROM myTable
GROUP BY Name然后,在PHP中,您可以使用函数打印主题。
希望这能有所帮助。
Demo at sqlfiddle
发布于 2012-07-17 01:35:31
尝试使用GROUP BY和GROUP_CONCAT
SELECT Name, GROUP_CONCAT(Subjects) AS Subjects_list
FROM students_table
GROUP BY Name然后在获取记录时使用PHP函数explode来获取存储在Subjects_list列中的不同值。
https://stackoverflow.com/questions/11509407
复制相似问题