如何在PHP和MySQL中将行值分成不同的列

时间:2015-07-26 03:31:04

标签: php mysql

我正在尝试创建一个查询,该查询从不同的行中获取值并将它们放入不同的列中。这是我到目前为止提出的查询:

SELECT red.match_number AS 'Match #', red.redTeams AS 'Red Alliance', blue.blueTeams AS 'Blue Alliance', red.redScore AS 'Red Alliance Score', blue.blueScore AS 'Blue Alliance Score'
FROM(SELECT match_number, GROUP_CONCAT(team SEPARATOR ' | ') AS redTeams, score AS redScore
FROM `scout_data`
WHERE alliance_color = 'red'
GROUP BY match_number) AS red
LEFT JOIN (SELECT match_number, GROUP_CONCAT(team SEPARATOR ' | ') AS blueTeams, score AS blueScore
FROM `scout_data`
WHERE alliance_color = 'blue'
GROUP BY match_number) AS blue ON red.match_number = blue.match_number

这会创建一个这样的表:
但是我想将蓝色和红色联盟列中的数字分开,所以它看起来像这样:
除外没有资格栏名。我的表格结构如下所示:我已将图片中的所有列限制为与查询相关的内容。

2 个答案:

答案 0 :(得分:0)

我认为您想要或引用的内容称为交叉连接或数据透视表

正如我在评论中所说,

已经回答了 MySql CROSS JOIN between two tables and match with another

答案的例子http://sqlfiddle.com/#!9/3540f/4

关于MySql的GROUP_CONCAT()的警告:

我应该提到的另一件事(我觉得)当我看到你使用GROUP_CONCAT时,当我第一次看到这个时,我认为这是我需要的一些神奇的答案。后来我发现它是MySql具体的。但更令人担忧的是,经过一番艰苦的调试后,我发现它有一个长度限制。因此,简而言之,GROUP_CONCAT可能会截断您的数据。我决定避免在我的代码中使用它。我以为我会警告你。

Mysql truncates concatenated result of a GROUP_CONCAT Function

需要更多信息 因为,除了这一点之外,更多的是一个演示问题,如果你在第一张图片中有设置。

http://puu.sh/jd3a7/658df8a999.png

现在,给我们你的演示代码(php \ html)以及进入Sql的数据更合适,Sql很好但没有数据库设置。很难看出那是什么输出。

基本上结果数组的结构是什么,以及如何使它看起来像image1?

答案 1 :(得分:0)

正如ArtisiticPhoenix所说,我认为需要更多关于如何配置数据库的信息才能提供最准确的答案。从我可以收集的内容来看,所有这些数据都在一个表中。我对此感到困惑的部分是,如果您按团队ID进行分组和连接,得分来自哪里,是否为每个团队存储了相同的分数?如果没有,那么返回的分数可能不正确吗?

我想我所得到的是这里似乎存在一些数据规范化问题,获取更多信息也有助于调试它。