AMcoder - javascript, python, java, html, php, sql

Piwik MySQL DB. հաշվարկել օգտվողի գործողությունների երկարությունը

Ես փորձում եմ հաշվարկել օգտվողի գործողության երկարությունը մի կայքում, որը հետևվել է Piwik-ի կողմից: Սեսիայի տվյալները պահվում են MySQL «log_visit_action» աղյուսակում:

«time_spent_action» սյունակում ես ուզում եմ հաշվարկել օգտվողի ծախսած ժամանակը մինչև հաջորդ գործողությունը կատարելը կամ մինչև կայքը լքելը («idvisit»-ին այլ գործողություն չի նշանակվել):

Excel-ում ես կիմանայի, թե ինչպես լուծել խնդիրը: Ինքնին դժվար չէ. Բայց քանի որ ես նոր եմ MySQL-ում, ես պատկերացում չունեմ, թե ինչպես դա ներդնել այս MySQL աղյուսակում՝ 50 միլիոն գրառումներով: Միգուցե դուք կարող եք տրամադրել որոշ կոդի օրինակներ:

Սա աղյուսակի կառուցվածքի սքրինշոթն է, որը ես արտահանել եմ Excel: Այստեղ դուք կարող եք գտնել մի քանի օրինակ տվյալներ sqlfiddle-ում:

Կանխավ շատ շնորհակալություն, Լարս

Աղյուսակի կառուցվածք


  • Տեղադրեք աղյուսակ sqlfiddle.com-ում մի քանի օրինակ տվյալների հետ 17.09.2015
  • Ահա մի քանի օրինակ տվյալներ՝ sqlfiddle.com/#!9/62f235/3 18.09.2015
  • Բարև Ռայմոնդ, ի՞նչ եք կարծում, լուծում ունե՞ք: 21.09.2015

Պատասխանները:


1

Վերջերս ես նույն խնդրի հետ եմ եկել: Հետևաբար, այստեղ կա լուծում՝ աշխատելով ժամանակավոր աղյուսակների հետ: Իրականում ես երկու լուծում եմ առաջարկում.

Լուծումը (A) նույնականացնում է հետագա log_action_link-ը՝ օգտագործելով ենթհարցումը (շատ ժամանակատար)

# Very time-consuming
CREATE TEMPORARY TABLE tmp
    (INDEX idlink_follow (idlink_follow))
    SELECT idlink_va, time_spent_ref_action AS time_spent_action, idvisit, (
        SELECT idlink_va FROM piwik_log_link_visit_action b
        WHERE (a.idvisit = b.idvisit) AND (b.idlink_va < a.idlink_va)
        ORDER BY idlink_va
        LIMIT 1
    ) AS idlink_follow
    FROM piwik_log_link_visit_action a
    ORDER BY idvisit DESC, idlink_va DESC;

Լուծումը (B) կախված է մաքուր և ամբողջական piwik_log_link_visit_action աղյուսակից: Սովորաբար այդպես է, բայց երբեք չես կարող լիովին վստահ լինել:

# Create table containing the time per action
# (requires a clean and complete piwik_log_link_visit_action)
CREATE TEMPORARY TABLE tmpA
SELECT idlink_va, time_spent_ref_action, idvisit
    FROM piwik_log_link_visit_action
    ORDER BY idvisit, idlink_va;
SELECT * FROM tmpA;

SET @lagID = NULL;
CREATE TEMPORARY TABLE tmp
    (INDEX idlink_follow (idlink_follow))
    SELECT @lagID AS idlink_follow, time_spent_ref_action AS time_spent_action, @lagID:=idlink_va AS idlink_va
    FROM tmpA
    ORDER BY idvisit, idlink_va;

DROP TEMPORARY TABLE tmpA;

Ժամանակավոր աղյուսակի հիման վրա էջի ժամանակները հասանելի են՝

SELECT l.idvisit, t.time_spent_action, l.*
FROM piwik_log_link_visit_action l
LEFT JOIN tmp t ON (t.idlink_follow = l.idlink_va)
ORDER BY l.idvisit, l.server_time

Միտք ջնջել ժամանակավոր աղյուսակը:

DROP TEMPORARY TABLE tmp;
07.10.2015
  • Շատ շնորհակալություն! Սա իսկապես դա արեց ինձ համար: Հիանալի աշխատանք: Ես ընտրեցի լուծումը A: 12 միլիոն գրառում ունեցող աղյուսակի համար առաջին քայլը տևեց մոտ 3,5 ժամ: 03.11.2015
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..