首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在单个表的一行中添加多行

仅在单个表的一行中添加多行
EN

Stack Overflow用户
提问于 2012-07-17 01:27:52
回答 4查看 6.1K关注 0票数 3

如何通过mysql连接一行中的多行?

示例:

学生表

代码语言:javascript
复制
Sno.| Name  |  Subjects
1.  | ABC   |  English
2.  | ABC   |  Mathematics
3.  | ABC   |  Science
4.  | FMC |  French
5.  | ABC   |  Russian
6.  | JBC   |  French

现在我希望它是这样的格式

代码语言:javascript
复制
Sno.| Name |   Sub1 |  Sub2 | Sub3 |  Sub4 |
1.  | ABC |   Eng  |  Maths| Science| Russian
2.  | FMC |    French| Null| Null   | Null
3.  | JBC |   French| Null | Null   | Null

我不确定到底该怎么做?我应该创建一个视图还是一个表?

我想能看到风景就可以了。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-17 03:59:40

我同意其他的答案,GROUP_CONCAT和PHP一起拆分逗号分隔值可能是最好的方法,但是如果你出于任何其他原因需要通过Pure SQL建议的输出,我会建议以下方法之一。

代码语言:javascript
复制
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;

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2012-07-17 02:02:57

使用以下查询,获取姓名和他/她的主题。

代码语言:javascript
复制
SELECT Name, GROUP_CONCAT(Subjects) AS List
FROM myTable
GROUP BY Name

然后,在PHP中,您可以使用函数打印主题。

希望这能有所帮助。

Demo at sqlfiddle

票数 1
EN

Stack Overflow用户

发布于 2012-07-17 01:35:31

尝试使用GROUP BY和GROUP_CONCAT

代码语言:javascript
复制
SELECT Name, GROUP_CONCAT(Subjects) AS Subjects_list
FROM students_table
GROUP BY Name

然后在获取记录时使用PHP函数explode来获取存储在Subjects_list列中的不同值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11509407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档