Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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_Pivot Table_Multiple Columns_Rows - Fatal编程技术网

MySQL将多行转换为列

MySQL将多行转换为列,mysql,pivot-table,multiple-columns,rows,Mysql,Pivot Table,Multiple Columns,Rows,我有一个名为visions的表,其中concat(s\u id,c\u id)是唯一的,而id是主键s_id是网站的id号,c_id是活动id号。我想显示每个活动的所有点击率,并按网站分组。我想在一行上的每个网站 +-----+------+------+------+ | id | s_id | c_id | hits | +-----+------+------+------+ | 1 | 13 | 8 | 245 | | 2 | 13 |

我有一个名为
visions
的表,其中
concat(s\u id,c\u id)
是唯一的,而
id
是主键
s_id
是网站的id号,
c_id
是活动id号。我想显示每个活动的所有点击率,并按网站分组。我想在一行上的每个网站

  +-----+------+------+------+
  | id  | s_id | c_id | hits | 
  +-----+------+------+------+
  |  1  |   13 |   8  |  245 |
  |  2  |   13 |   8  |  458 |
  |  3  |   13 |   3  |   27 |
  |  4  |   13 |   4  |  193 |
  |  5  |   14 |   1  |  320 |
  |  6  |   14 |   1  |  183 |
  |  7  |   14 |   3  |  783 |
  |  8  |   14 |   4  |  226 |
  |  9  |   5  |   8  |  671 |
  |  10 |   5  |   8  |  914 |
  |  11 |   5  |   3  |  548 |
  |  12 |   5  |   4  |  832 |
  |  13 |   22 |   8  |   84 |
  |  14 |   22 |   1  |   7  |
  |  15 |   22 |   3  |  796 |
  |  16 |   22 |   4  |   0  |
  +----+------+------+-------+
我希望得到以下结果集:

s_id | hits | hits | hits| hits
 13  | 245  | 458  | 27  | 193
 14  | 320  | 183  | 783 | 226
 5   | 671  | 914  | 548 | 832
 22  | 84   | 7    | 796 | 0
这是我尝试过的,它并没有把所有的点击列都拉回来

SELECT v.*, v2.* FROM visits v
INNER JOIN visits v2 on v.s_id = v2.s_id
GROUP BY s_id

如何将多行放入列中?

如果您的数据集不是非常大,而您只是试图将多行作为一行。。。。一种方法是

SELECT
s_id, 
GROUP_CONCAT(hits SEPARATOR ',') as hits_list 
FROM
visits
GROUP BY s_id
由于它不使用任何连接或子查询等,我发现这种方法相当快

以后可以根据PHP中的“,”分隔符或您使用的任何语言拆分/分解数据

$hits = explode($hits_list, ','); //get them in an array

一个简单明了的解决方案。然而,如果我没有错的话,关于网站点击率的数据更可能是“疯狂的巨大”。我希望看到一种更高效的方法来实现这一点。通常,如果数据很大,可以修改
组\u concat\u max\u len
<代码>设置会话组\u concat\u max\u len=1000000GROUP BY。。。因为那太棒了。。。!!!并非我所知:(在这种情况下,我实际上要将此查询连接到其他3个表,但是为了简化我的问题,我将其排除在外。这将在管理界面中,因此不会受到太大的影响,但大家一致认为,在高流量下,这将有点困难。