2016-12-19 3 views
0

Использование wordpress. Я собирал ежедневные просмотры (общие и уникальные) и теперь хочу видеть ежемесячную статистику для определенных страниц. Я мог бы получить общее количество просмотров, но у вас возникли проблемы при получении уникальных просмотров. Я сделал ниже:получить уникальный счет посетителей с определенными идентификаторами страниц - php

$ids = '181,57,123'; 
$certainPageIds = explode(',', $ids); 
foreach($certainPageIds as $id){ 
    $uniqueViews = $wpdb->get_results("SELECT distinct IP as all_uniques, 
    DATE_FORMAT(insertion_date, '%b') as month_name, DATE_FORMAT(insertion_date, 
    '%Y-%M') as full_date FROM daily_unique_views WHERE page_id = '".$id."'"); 
    if($uniqueViews){ 
     $uniqueViewsEncodedArray = json_decode(json_encode($uniqueViews), True); 
     var_dump($uniqueViewsEncodedArray); 
    } 
} 

И выше массив возвращает ниже:

array(2) { 
    [0]=> 
    array(3) { 
    ["all_uniques"]=> 
    string(13) "111.11.11.111" 
    ["month_name"]=> 
    string(3) "Dec" 
    ["full_date"]=> 
    string(13) "2016-December" 
    } 
    [1]=> 
    array(3) { 
    ["all_uniques"]=> 
    string(13) "22.222.222.22" 
    ["month_name"]=> 
    string(3) "Dec" 
    ["full_date"]=> 
    string(13) "2016-December" 
    } 
} 
array(2) { 
    [0]=> 
    array(3) { 
    ["all_uniques"]=> 
    string(13) "111.11.11.111" 
    ["month_name"]=> 
    string(3) "Nov" 
    ["full_date"]=> 
    string(13) "2016-November" 
    } 
    [1]=> 
    array(3) { 
    ["all_uniques"]=> 
    string(13) "111.11.11.111" 
    ["month_name"]=> 
    string(3) "Dec" 
    ["full_date"]=> 
    string(13) "2016-December" 
    } 
    [2]=> 
    array(3) { 
    ["all_uniques"]=> 
    string(12) "33.333.3.333" 
    ["month_name"]=> 
    string(3) "Dec" 
    ["full_date"]=> 
    string(13) "2016-December" 
    } 
} 
array(1) { 
    [0]=> 
    array(3) { 
    ["all_uniques"]=> 
    string(13) "111.11.11.111" 
    ["month_name"]=> 
    string(3) "Oct" 
    ["full_date"]=> 
    string(13) "2016-October" 
    } 
} 

Так он возвращает ежемесячно уникальный вид каждой страницы. Но как вы замечаете, 111.11.11.111 появляется много раз. Поэтому у меня есть один и тот же IP-адрес за декабрь для каждой из страниц. Но мне нужно, чтобы один IP-адрес подсчитывался за каждый месяц только один раз. Как я могу дотянуться до этого? Что-то связано с существующим результатом или оно должно быть исправлено с помощью sql? Любые идеи, пожалуйста?

+0

Вы пытались добавить группу по IP? – atoms

+0

Да, я пробовал, но в этом случае я теряю некоторые ips. Поэтому, когда он видит, что текущий IP уже существует, он не выбирает его, но, например, это был uniqur в течение еще одного месяца, поэтому я потерял это единственное представление за этот месяц @atoms – aidadev

ответ

0

Вы можете использовать КТР (общий стол expresson), что-то вроде ниже:

DECLARE @ips TABLE(
    id int, 
    ip varchar(3), 
    month varchar(3) 
) 

INSERT INTO @ips VALUES (1,'ip1', 'jan') 
INSERT INTO @ips VALUES (2,'ip2', 'jan') 
INSERT INTO @ips VALUES (3,'ip1', 'feb') 
INSERT INTO @ips VALUES (4,'ip2', 'feb') 
INSERT INTO @ips VALUES (5, 'ip2', 'jan'); 

-- Define the CTE expression name and column list. 
WITH cte_ips (ip, month) 
AS 
-- Define the CTE query. 
(
    SELECT ip, month FROM @ips 
) 
-- count the results 
SELECT COUNT(DISTINCT ip), COUNT(ip), month FROM Cte_ips GROUP BY Month 



-- Define the outer query referencing the CTE name. 
SELECT COUNT(DISTINCT IP) AS UniqueIPs, COUNT(IP) AS TotalIPs, month FROM cte_ips 
GROUP BY month 
+0

ли MySQL поддерживает 'CTE' и' WITH' статью ? @atoms – aidadev

+0

Нет, правильно, не понимал, что это было для MySQL. Вы могли бы переместиться в таблицу var или temp в том же, что и запрос CTE, затем запросить это? – atoms

+0

есть ли какое-нибудь другое решение, о котором вы думаете? @atoms – aidadev

Смежные вопросы