PHP MySQL合并具有相同列值的行

时间:2017-02-28 09:44:26

标签: php mysql

我的表格如下:

year | url                | view
-------------------------------
2016 | /document/item.pdf | 21
2015 | /document/item.pdf | 35
2014 | /document/item.pdf | 41

我希望构建另一个表格如下:

 url                | 2014 | 2015 | 2016
---------------------------------------
 /document/item.pdf | 41   | 35   | 21

我现在真的不怎么写我的mysql查询来做到这一点。 谢谢你的帮助:)

4 个答案:

答案 0 :(得分:1)

  1. 查询第一个表到PHP数组的所有数据,数组如下:

    $data = [[2016, "/document/item.pdf", 21],
        [2015, "/document/item.pdf", 35],
        [2014, "/document/item.pdf", 41]];
    
  2. 遍历$data,创建另一个关联数组$result,其键是url,value是包含年份和视图的数据数组:

    $result = array();
    foreach ($data as $value) {
        $result[$value['url']][$value['year']] = $value['view'];
    }
    
  3. 遍历新数组,并将数据写回MySQL

答案 1 :(得分:1)

你可以试试这个:

 SELECT  url,
            MAX(IF(`year` = 2014 , view, NULL)) '2014',
            MAX(IF(`year` = 2015, view, NULL)) '2015',
            MAX(IF(`year` = 2016, view, NULL)) '2016'
    FROM    pub
    GROUP   BY url

答案 2 :(得分:0)

你必须制作两张桌子 - >首先保存文件,第二个保存访问 像这样

文件表

url_id | url
------------------------
1      |/document/item.pdf 
2      |/document/item.pdf 

访问表(url_id)是文件表中的forign键

url_id | time
---------------
1       | 987907872     
2       | 987907872
2       | 987978272
2       | 987907872
2       | 987907872
1       | 987907872
1       | 987907872
1       | 987907872

========================

然后您可以按年访问表格查看每个网址的访问次数

答案 3 :(得分:0)

可能会帮助你

SELECT 
    url, 
    sum( if( year= '2014', view, 0 ) ) AS 2014,  
    sum( if( year= '2015', view, 0 ) ) AS 2015, 
    sum( if( year= '2016', view, 0 ) ) AS 2016 
FROM 
    pub
GROUP BY 
    url;