2017-02-28 74 views
1

我有一个表是这样的: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查询来做到这一点。 感谢您的帮助:)

+0

请不要让我们猜你的要求。并请提供一些见解,你迄今为止尝试过的。 就目前而言,你的问题看起来像一个“做我的作业”问题(通常会很快关闭) – Burki

回答

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 
+0

这是我正在查找的查询。谢谢Vikas – Falco

1
  1. 查询从第一台到PHP阵列的所有数据,数组会像:

    $data = [[2016, "/document/item.pdf", 21], 
        [2015, "/document/item.pdf", 35], 
        [2014, "/document/item.pdf", 41]]; 
    
  2. 特拉弗斯$data,再拍关联数组$result,其主要是网址,值是具有年份和视图的数据数组:

    $result = array(); 
    foreach ($data as $value) { 
        $result[$value['url']][$value['year']] = $value['view']; 
    } 
    
  3. 遍历新的阵列y和数据写回的MySQL

+0

我专注于一个mysql查询,但它对数组工作正常。感谢Martin。 – Falco

0

你必须做两个表 - >先保存文件,第二个 保存访问这样

文件表

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

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

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

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

那么您可以在访问表按年检查一次,查看每个URL的访问次数

+1

感谢您的帮助 – Falco

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; 
+0

谢谢你的帮助 – Falco