Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.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
Php MySQL-将行合并为一行_Php_Mysql_Sql_Database - Fatal编程技术网

Php MySQL-将行合并为一行

Php MySQL-将行合并为一行,php,mysql,sql,database,Php,Mysql,Sql,Database,我搜索了各种各样的问题,但没有找到答案。 我有一个MySQL表“团队”: +--+----+------+ |id|name|active| +--+----+------+ |1 |bla |1 | |2 |blu |0 | |3 |croc|1 | |4 |bold|1 | |5 |foo |1 | |6 |bar |0 | +--+----+------+ 和一个表“数据”: +----+-------+----+ |team|projec

我搜索了各种各样的问题,但没有找到答案。 我有一个MySQL表“团队”:

+--+----+------+
|id|name|active|
+--+----+------+
|1 |bla |1     |
|2 |blu |0     |
|3 |croc|1     |
|4 |bold|1     |
|5 |foo |1     |
|6 |bar |0     |
+--+----+------+
和一个表“数据”:

+----+-------+----+
|team|project|time|
+----+-------+----+
|2   |some   |1   |
|2   |some2  |5   |
|3   |one    |16  |
|3   |one2   |100 |
|5   |more   |2   |
|5   |more2  |60  |
+----+-------+----+
在PHP中,我查询的数据如下:

SELECT t.name, t.active, d.time
FROM teams t
RIGHT JOIN data d ON (t.id = d.team)
ORDER BY t.id
一切正常,我的结果如下:

+----+------+----+
|name|active|time|
+----+------+----+
|blu |0     |1   |
|blu |0     |5   |
|croc|1     |16  |
|croc|1     |100 |
|foo |1     |2   |
|foo |1     |60  |
+----+------+----+
+----+------+---+---+
|name|active|t1 |t2 |
+----+------+---+---+
|blu |0     |1  |5  |
|croc|1     |16 |100|
|foo |1     |2  |60 |
+----+------+---+---+
SELECT
  teams.name,
  teams.active,
  min(d1.time) t1,
  max(d2.time) t2
FROM
  teams INNER JOIN data d1
  ON teams.id=d1.team
  LEFT JOIN data d2
  ON teams.id=d2.team AND d1.time<d2.time
GROUP BY
  teams.name,
  teams.active
…但我希望我的结果如下所示:

+----+------+----+
|name|active|time|
+----+------+----+
|blu |0     |1   |
|blu |0     |5   |
|croc|1     |16  |
|croc|1     |100 |
|foo |1     |2   |
|foo |1     |60  |
+----+------+----+
+----+------+---+---+
|name|active|t1 |t2 |
+----+------+---+---+
|blu |0     |1  |5  |
|croc|1     |16 |100|
|foo |1     |2  |60 |
+----+------+---+---+
SELECT
  teams.name,
  teams.active,
  min(d1.time) t1,
  max(d2.time) t2
FROM
  teams INNER JOIN data d1
  ON teams.id=d1.team
  LEFT JOIN data d2
  ON teams.id=d2.team AND d1.time<d2.time
GROUP BY
  teams.name,
  teams.active
所以。。。我怎样才能到达这里?我希望我没有忽略一个已经提出的问题…:(

多谢各位

编辑:首先,谢谢大家,但我忘了一些东西…也可能是one2不存在…

试试这个

 SELECT t.name, t.active, 
 min(time) t1, max(time)t2
FROM teams t
RIGHT JOIN data d ON (t.id = d.team)
group by name
ORDER BY t.id
   SELECT t.name, t.active, 
   min(time) t1, if  (  max(time) is not null and max(time) <> min(time) , max(time), null )t2
  FROM teams t
  RIGHT JOIN data d ON (t.id = d.team)
  group by name
  ORDER BY t.id

编辑:

试试这个

 SELECT t.name, t.active, 
 min(time) t1, max(time)t2
FROM teams t
RIGHT JOIN data d ON (t.id = d.team)
group by name
ORDER BY t.id
   SELECT t.name, t.active, 
   min(time) t1, if  (  max(time) is not null and max(time) <> min(time) , max(time), null )t2
  FROM teams t
  RIGHT JOIN data d ON (t.id = d.team)
  group by name
  ORDER BY t.id
选择t.name,t.active,
最小值(时间)t1,如果最大值(时间)不为空,最大值(时间)最小值(时间),最大值(时间),空)t2
来自t队
右连接数据d ON(t.id=d.team)
按名称分组
按t.id订购

如果每个团队最多有两排,我会使用以下方法:

+----+------+----+
|name|active|time|
+----+------+----+
|blu |0     |1   |
|blu |0     |5   |
|croc|1     |16  |
|croc|1     |100 |
|foo |1     |2   |
|foo |1     |60  |
+----+------+----+
+----+------+---+---+
|name|active|t1 |t2 |
+----+------+---+---+
|blu |0     |1  |5  |
|croc|1     |16 |100|
|foo |1     |2  |60 |
+----+------+---+---+
SELECT
  teams.name,
  teams.active,
  min(d1.time) t1,
  max(d2.time) t2
FROM
  teams INNER JOIN data d1
  ON teams.id=d1.team
  LEFT JOIN data d2
  ON teams.id=d2.team AND d1.time<d2.time
GROUP BY
  teams.name,
  teams.active
选择
团队名称,
团队,积极,
最小值(d1时间)t1,
最大(d2时间)t2
从…起
团队内部连接数据d1
在团队中。id=d1.team
左连接数据d2

在teams.id=d2.team和d1.timeyou不需要。你想要的基本上是一个pivot表,mysql不支持。在你的客户机代码中进行转换。它可以用sql编写,但它变得非常难看,非常快。尽管我不得不同意@MarcB:它可能会变得混乱!他已经在他想要的结果
t1和
t2
,如果他有三个,他还应该提到
t3
@user2329363,如果一个2不存在,你想要什么结果?有可能,项目“一”存在,但项目“一”不存在。在这种情况下,“t2”应该为空。但在你的情况下,“t2”的值为“t1”。现在我有另一个问题……它也可能存在假设“one”不存在,但“one2”存在。那么“t1”应该为null。我如何管理它?我的查询也适用于第二个建议,否则您如何知道它的t1或t2时间值?