Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql根据结果创建虚拟列_Mysql - Fatal编程技术网

Mysql根据结果创建虚拟列

Mysql根据结果创建虚拟列,mysql,Mysql,我有5张桌子: 用户 用户配置文件 课程 user\u主题 主题 用于为使用此查询的每个用户提取相关主题的: SELECT --snip-- u.id, u.username, u.level, c.name course_expertise, GROUP_CONCAT(s.name ) subjects FROM user_profiles up INNER JOIN users u ON up.user_id = u.id INNER

我有5张桌子:
用户
用户配置文件
课程
user\u主题
主题

用于为使用此查询的每个用户提取相关主题的:

SELECT
    --snip--
    u.id,
    u.username,
    u.level,
    c.name course_expertise,
    GROUP_CONCAT(s.name ) subjects
FROM
    user_profiles up
INNER JOIN users u ON up.user_id = u.id
INNER JOIN courses c ON up.course_expertise_id = c.id
INNER JOIN user_subjects us ON u.id = us.user_id
INNER JOIN subjects s ON us.subject_id = s.id
GROUP BY u.id
导致:

+----+-----------+-----------+-----------------------------------+-------------------+
| id | username  | level     | course_expertise                  | subjects          |
+----+-----------+-----------+-----------------------------------+-------------------+
|  2 | lecturer  | lecturer  | Information Technology Management | sub1, sub2, sub3  |
|  3 | professor | professor | Information Technology Management | sub4, sub 5, sub6 |
+----+-----------+-----------+-----------------------------------+-------------------+
我有没有办法做到这一点:

+----+-----------+-----------+-----------------------------------+----------+----------+----------+
| id | username  | level     | course_expertise                  | subject1 | subject2 | subject3 |
+----+-----------+-----------+-----------------------------------+----------+----------+----------+
|  2 | lecturer  | lecturer  | Information Technology Management |   sub1   |   sub2   | sub3     |
|  3 | professor | professor | Information Technology Management |   sub4   |   sub5   | sub6     |
+----+-----------+-----------+-----------------------------------+--------------------------------+
已编辑
主题
列将始终包含3个主题

如果只有3个主题,则它将正常工作

select ID,
username,
level,
name course_expertise,
SUBSTRING_INDEX(subjects,',','1') subject1,
SUBSTRING_INDEX(SUBSTRING_INDEX(subjects,',','2'),',','-1') subject2,
SUBSTRING_INDEX(SUBSTRING_INDEX(subjects,',','3'),',','-1') subject3
 from
(

SELECT
    u.id,
    u.username,
    u.level,
    c.name course_expertise,
    GROUP_CONCAT(s.name ) subjects
FROM
    user_profiles lp
INNER JOIN users u ON lp.user_id = u.id
INNER JOIN courses c ON lp.course_expertise_id = c.id
INNER JOIN user_subjects us ON u.id = us.user_id
INNER JOIN subjects s ON us.subject_id = s.id
GROUP BY u.id

) A

更改

GROUP_CONCAT(s.name ) subjects
max( case when s.name in( 'sub1', 'sub4' ) then s.name else null end ) as 'Subject 1'  
, max( case when s.name in( 'sub2', 'sub5' ) then s.name else null end ) as 'Subject 2'  
, max( case when s.name in( 'sub3', 'sub6' ) then s.name else null end ) as 'Subject 3'  

GROUP_CONCAT(s.name ) subjects
max( case when s.name in( 'sub1', 'sub4' ) then s.name else null end ) as 'Subject 1'  
, max( case when s.name in( 'sub2', 'sub5' ) then s.name else null end ) as 'Subject 2'  
, max( case when s.name in( 'sub3', 'sub6' ) then s.name else null end ) as 'Subject 3'  

总是只有3个主题还是可以增加它们?@MKhalidJunaid总是3..完全一样我要发布:)@MKhalidJunaid:我也可以期待对我的解决方案发表评论吗?:)我现在在外面…我一测试就接受你的答案..谢谢anyway@MKhalidJunaid:好的。我知道使用了
子字符串\u索引
。刚才建议对有限数量的项目使用
大小写
。@MKhalidJunaid:Cool。但根据您对其他答案的评论,如果唯一主题的数量有限,这是可以采用的。我现在不知道主题名称,所以我想我不能使用这个