2017-02-28 92 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