Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.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_Database - Fatal编程技术网

Php Mysql查询,使用字段作为列

Php Mysql查询,使用字段作为列,php,mysql,database,Php,Mysql,Database,我有下面的表结构 +-------+------------+-----------+---------------+ | id |assigned_to | status | group_id | +-------+------------+-----------+---------------+ | 1 | 1001 | 1 | 19 | +-------+------------+-

我有下面的表结构

+-------+------------+-----------+---------------+
| id    |assigned_to | status    |  group_id     |              
+-------+------------+-----------+---------------+
| 1     | 1001       | 1         |    19         |
+-------+------------+-----------+---------------+
| 2     | 1001       | 2         |    19         |
+-------+------------+-----------+---------------+
| 3     | 1001       | 1         |    18         |
+-------+------------+-----------+---------------+
| 4     | 1002       | 2         |    19         |
+-------+------------+-----------+---------------+
| 5     | 1002       | 2         |    19         |
+-------+------------+-----------+---------------+
我想获得以下格式的信息

+-------+------------+-----------+
|       |   1001     |   1002    |          
+-------+------------+-----------+
| 1     |    1       |    0      |   
+-------+------------+-----------+
| 2     |    1       |    2      |   
+-------+------------+-----------+
因此,基本上我希望使用assigned to字段作为列名。然后,这些行表示状态。例如,在表中,我们有两行,其中用户1002的状态为2,因此总和显示在特定的状态行上

请注意,
组id
必须为19。因此,我在表中遗漏了id为3的行


有人能给我指一下正确的方向吗。我确信这类查询有一个名字,但我无法用语言来表达。我尝试过其他各种查询,但没有一个能接近这一点。

您可能想阅读本文

我会是这样的

SELECT 
  assigned_to, 
  COUNT( CASE assigned_to WHEN '1001' THEN 1 ELSE 0 END ) AS '1001', 
  COUNT( CASE assigned_to WHEN '1002' THEN 1 ELSE 0 END ) AS '1002'
FROM table
WHERE group_by = 19
GROUP BY assigned_to WITH ROLLUP; 
或者类似的东西(我还没有测试过这段代码)

在本文中,他使用
SUM()
来执行此操作。您必须使用
COUNT()
来执行此操作,并为组id添加WHERE约束


希望这有帮助

如果Marc B是正确的,就没有办法透视表-即将字段的内容转换为列-除非您做出一些假设,例如假定指定的_to的值在某种程度上是固定的

另一方面,这是一种可以通过程序解决的问题。这不是一个简单的程序,但它可以完成这项工作


我最近用java编写了一个类似的程序,如果你感兴趣,我可以在这里发布它的核心

这是一个pivot查询,mysql不支持它们。有一些变通方法,但是查询变得非常难看,非常快。在代码中进行行->列转换,并使用常规查询。@MarcB感谢您花时间回答。您是否可以对此展开讨论,或者为我指一段关于行->列转换的文档。非常感谢。@MarcB有趣的是,我刚刚在skype上和一个做过这件事的人谈过,这个查询大约有100行,看起来很糟糕。我想我会走php路线。我宁愿多用几行php,而不是一个无法管理、无法读取的单一查询。基本上,解决方法只允许固定数量的行->列转换,您知道这些值是什么。没有办法进行泛型转换来处理所有任意情况,因为无论如何,基本上都有pivot支持。但是你基本上会得到
选择if(field=1,field,0)作为field_1,if(field=2,field,0)作为field_2
等等…是的,这就是我在中间的内容,但是这假设你在赋值给列中有固定数量的值,并且这不能在不更改查询的情况下更改。谢谢你的回答,但是@RaulLuna是正确的,我有一个动态的用户列表,不幸的是,这还不够,请投你一票。@jonpaurh yeap。。在本文中,他们展示了如何使用过程生成此查询。。也可以用PHP生成此查询。。不管怎样,这仍然是一个难看的问题:)好运气谢谢你的回答。我想我必须通过一些查询和一些代码来完成。谢谢你的提议。