Statistiche On Line & View per facilitare il recupero dei dati

Salve a tutti,

sto impazzendo nella creazione di una view in mysql che mi permetta di recuperare l'ultima settimana di  statistiche degli utenti. Non oso immaginare di fare 7 queries per un milione di utenti per poter recuperare queste informazioni dal db. :buck:

Select count(*) as total
FROM
`statistics`
WHERE
`statistics`.`idpersonal_data` = '9' AND
`statistics`.`datetime` between '2006-09-26 00:00:00' and '2006-12-26 00:00:00'

La query qui su mi recupera il totale degli accessi degli utenti che hanno fatto visita al sito. Come posso creare una view che mi permetta una lista ordinata di statistiche settimanali per utente?

Grazie

Ulisse  :bye:

inviato 9 anni fa
ulisse
X 0 X

dovresti ricavare il numero della settimana ( SELECT DATE_FORMAT(nome_campo_data, "%U") ) a cui appartengono le date, e poi raggruppare i record (GROUP BY) secondo tale numero.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Non ho ben capito come fare.  :-\

Ho provato così:

SELECT DATE_FORMAT(datetime, "%U")  FROM `statistics`
where `statistics`.`idpersonal_data` = '9'  
GROUP BY datetime

il campo datetime presenta anche l'ora: 2006-09-26 07:12:43

Ma mi ritorna un gruppo diverso per ogni record poichè non riesce a raggruppare per via delle ore minuti e secondi.

Grazie

 :bye:

risposto 9 anni fa
ulisse
modificato 9 anni fa
X 0 X

Ti riporto un esempio completo, dal quale non dovresti aver problemi ad estrapolare la soluzione:

Struttura e dati della tabella:

CREATE TABLE `accessi` (
  `data_id` int(11) NOT NULL auto_increment,
  `data` datetime default NULL,
  PRIMARY KEY  (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

insert  into `accessi`(`data_id`,`data`) values (1,'2007-02-01 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (2,'2007-02-02 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (3,'2007-02-03 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (4,'2007-02-04 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (5,'2007-02-08 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (6,'2007-02-09 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (7,'2007-02-10 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (8,'2007-02-11 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (9,'2007-02-15 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (10,'2007-02-16 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (11,'2007-02-17 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (12,'2007-02-20 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (13,'2007-02-21 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (14,'2007-02-22 00:00:00');
insert  into `accessi`(`data_id`,`data`) values (15,'2007-02-23 00:00:00');

Query per le statistiche:

SELECT COUNT(data_id) num_accessi, DATE_FORMAT(data, "%U") settimana FROM accessi GROUP BY settimana

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Grazie Gianni.

Sono riuscito a recuperare i records di un utente in questo modo:

Select idpersonal_data as idpersonal_data, DATE_FORMAT(datetime, '%d/%m/%Y') as date,  
(
select count(*) as tot from statistics where DATE_FORMAT(datetime, '%d/%m/%Y') = date and idpersonal_data = 9 group by DATE_FORMAT(datetime, '%d/%m/%Y')

) as total FROM `statistics`
            WHERE
            `statistics`.`idpersonal_data` = 9 AND
            `statistics`.`datetime` between (SELECT DATE_SUB( NOW( ) , INTERVAL 7 DAY )) and ( NOW( )) group by DATE_FORMAT(datetime, '%d/%m/%Y')

ecco il risultato:

id       date        total

9    13/02/2007    1

9    14/02/2007    8

9    15/02/2007    4

9    16/02/2007    1

9    17/02/2007    1

Come fare per recuperarli tutti?

Grazie ancora

 :bye:

risposto 9 anni fa
ulisse
modificato 9 anni fa
X 0 X

forse dovresti togliere

`statistics`.`idpersonal_data` = 9 AND

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ok ci siamo vicini.

Se scrivo:

SELECT
         fld_ik_idpersonal_data as idpersonal_data,
         DATE_FORMAT(fld_datetime, '%d/%m/%Y') as date
         FROM
         `tbl_statistics`
         WHERE
         `tbl_statistics`.`fld_datetime` between (SELECT DATE_SUB( NOW( ) , INTERVAL 7 DAY )) and ( NOW( ))
         order by idpersonal_data

il mio risultato è:

Array
(
    [0] => Array
        (
            [idpersonal_data] => 9
            [date] => 13/02/2007
        )

    [1] => Array
        (
            [idpersonal_data] => 9
            [date] => 14/02/2007
        )

    [2] => Array
        (
            [idpersonal_data] => 9
            [date] => 14/02/2007
        )

    [3] => Array
        (
            [idpersonal_data] => 9
            [date] => 14/02/2007
        )

    [4] => Array
        (
            [idpersonal_data] => 9
            [date] => 14/02/2007
        )

    [5] => Array
        (
            [idpersonal_data] => 9
            [date] => 14/02/2007
        )

    [6] => Array
        (
            [idpersonal_data] => 9
            [date] => 14/02/2007
        )

    [7] => Array
        (
            [idpersonal_data] => 9
            [date] => 14/02/2007
        )

    [8] => Array
        (
            [idpersonal_data] => 9
            [date] => 14/02/2007
        )

    [9] => Array
        (
            [idpersonal_data] => 9
            [date] => 15/02/2007
        )

    [10] => Array
        (
            [idpersonal_data] => 9
            [date] => 15/02/2007
        )

    [11] => Array
        (
            [idpersonal_data] => 9
            [date] => 15/02/2007
        )

    [12] => Array
        (
            [idpersonal_data] => 9
            [date] => 15/02/2007
        )

    [13] => Array
        (
            [idpersonal_data] => 9
            [date] => 16/02/2007
        )

    [14] => Array
        (
            [idpersonal_data] => 9
            [date] => 17/02/2007
        )

    [15] => Array
        (
            [idpersonal_data] => 9
            [date] => 18/02/2007
        )
)

Come puoi vedere il raggruppamento per data non c'è!

Se raggruppo per data mi fa vedere proprio degli altri records. Perche non mi raggruppa gli elementi con la data: 14/02/2007? In cosa sbaglio?

Grazie

 :bye:

risposto 9 anni fa
ulisse
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda