Newsgroup: it.comp.software.database
Titolo: pagina piu' visitata ogni mese

Ho una tabella fatta cosi' 
currentPage data
currentPage data
currentPage data
data riporta il mese e l'anno
currentPage  e' l'url di una pagina
Devo estrarre dalla tabella per ciascuna data la pagina piu' visitata
cioe' per ogni mese qual'e' la pagina piu' visitata.
Ho provato con una query sulla tabella php_stats_details del tipo:
SELECT MAX( c ) ,
DATA , currentPage AS mc
FROM (
SELECT count( * ) AS c, currentPage, FROM_UNIXTIME( date, '%M %Y' ) AS
DATA FROM `php_stats_details`
GROUP BY currentPage,
DATA
) AS q1
GROUP BY DATA , mc
MA NON FUNZIONA !
Mi date una mano per piacere ?

non mi aiuta nessuno ????

ma e' cosi' complicata la query ?

 ma e' cosi' complicata la query ?
SELECT count( * ) AS c, currentPage FROM php_stats_details GROUP BY 
currentPage order
by c desc limit 1

non hai l'informazione del mese

 non hai l'informazione del mese
Aggiungere il mese č facile
SELECT count( * ) AS c, currentPage , FROM_UNIXTIME( date, '%M %Y' ) AS mese
FROM php_stats_details
GROUP BY currentPage, mese
order by c desc limit 1
Non l'ho testata.. va a finire che era cosě facile che ho sbagliato!
E' a posto?
Ciao

sara' facile ma non funziona.
come risultato ho solo una riga.
io voglio che tante righe quanti sono i mesi.
e per ciacun mese la pagina piu' visitata


Ah.. scusa, non avevo capito niente: credevo volessi la pagina più 
visitata in assoluto e basta.
Ci riprovo più tardi


Ho notato che FROM_UNIXTIME non funziona come mi aspettavo, quindi ho 
ripiegato su month() e year()
Per il resto, controlla i risultati perchč l'ho testata su pochi dati.
Spero sia la volta buona, anche se esteticamente fa venire il voltastomaco!
Ciao
select  t2.c,t2.currentPage, t2.mese , t2.anno
from (
   SELECT count( * ) AS c, test.currentPage , month(date) as mese, 
year(date) as anno
   FROM php_stats_details
   group BY currentPage, mese, anno
) t2,
(
   select max(c) as c,   mese, anno
   from (
     SELECT count( * ) AS c, currentPage , month(date) as mese, 
year(date) as anno
     FROM php_stats_details
     group BY currentPage, mese, anno
   ) t3
   group BY  mese, anno
) t4
where t2.c = t4.c and t2.mese=t4.mese and t2.anno=t4.anno

Probabilmente il
   select max(c) as c,   mese, anno
   from (
     SELECT count( * ) AS c, currentPage , month(date) as mese, 
year(date) as anno
     FROM php_stats_details
     group BY currentPage, mese, anno
   ) t3
   group BY  mese, anno
è possibile sostituirlo con
SELECT count( * ) AS c, currentPage , month(date) as mese, year(date) as 
anno
     FROM php_stats_details
     group BY currentPage, mese, anno
order by c desc
limit 1
Invece che fare un'altra select per trovare il massimo di 'c', ordino la 
select interna per 'c' e prendo il primo risultato

 la select interna per 'c' e prendo il primo risultato
Gia', ma che succede se hai più pagine con lo stesso numero di visite?
Dovresti essere preparato a gestire un pari merito.
Purtroppo la clausola "limit" non è relazionale e andrebbe tolta
dall'Sql, perché maschera il fatto che sempre di insiemi si sta
parlando.
Anche gli "order by" li toglierei: sarebbe molto educativo :-)
ciao

 SQL query: Documentation
SELECT t2.c, t2.currentPage, t2.mese, t2.anno
FROM (
SELECT count( * ) AS c, test.currentPage, month( date ) AS mese, year(
date ) AS anno
FROM php_stats_details
GROUP BY currentPage, mese, anno
)t2, (
SELECT max( c ) AS c, mese, anno
FROM (
SELECT count( * ) AS c, currentPage, month( date ) AS mese, year( date
) AS anno
FROM php_stats_details
GROUP BY currentPage, mese, anno
)t3
GROUP BY mese, anno
)t4
WHERE t2.c = t4.c
AND t2.mese = t4.mese
AND t2.anno = t4.anno
LIMIT 0 , 30
MySQL said: Documentation
#1109 - Unknown table 'test' in field list 

togliendo test, mi restituisce zero risultati

Eseguendo questa:
SELECT count( * ) AS c, currentPage, month( date ) AS mese, year( date
) AS anno
FROM php_stats_details
GROUP BY currentPage, mese, anno
ho 5267 righe, ma i campi mese e anno sono tutti NULL

 ciao
Ciao

 ho 5267 righe, ma i campi mese e anno sono tutti NULL
Qualcosa non mi torna: nel database il campo "date" che 'tipo' č?
Forse tu devi usare "FROM_UNIXTIME" (che non so esattanebte cosa sia, ma 
magari funziona con il tipo che hai usato tu).

 togliendo test, mi restituisce zero risultati
'test' č la mia tabella di prova. Sostituisci a 'test' la tua tabella
Il numero di risultati č zero per il discorso del mese+anno pari a Null, 
suppongo (mi riferisco all'altra tua email)

"Alessandro":


Gli ordinamenti e generalmente tutte le cose relative alla
visualizzazione sono di pertinenza, e di solito meglio gestibili,
dal presentation layer. A ragionare diversamente, ovverosia a non
avere la giusta prospettiva mentale, si incorre in rischi di errori
difficili da trovare.
A proposito dell'esempio classico di visualizzare tot righe alla
volta, quanti programmatori credi che si rendono condo di usare un
procedimento errato che non tiene conto del fatto che le righe
possono venir aggiunte nel mentre si scrolla la lista?
Mi ricordo un caso in cui un totale veniva computato e visualizzato
in alto dello schermo; sotto, il controllo grafico mostrava le righe
usate per il calcolo, ma selezionate a più riprese col metodo citato;
ebbene, una pignola impiegata armata di calcolatrice e un po' di
pazienza, è riuscita a dimostrare che "il computer sbaglia le somme".
In questo caso sarebbe il programmatore a dover dare imbarazzate
spiegazioni al capo, e, una volta che la fiducia è stata persa, è
sempre difficile riconquistarla.
Ciao

 difficili da trovare.
Sono perfettamente d'accordo. Ma in realtà chiedevo 'come' ovviare a 
limit, order by, ecc.
In pratica cosa intendi per "presentation layer"? Quale è il software 
(il tool, il modulo..) che implementa tale p.l.?
Giusto per capire se effettivamente c'e' una alternativa subito 
praticabile oppure se stiamo parlando della teoria.
Ciao

 From: "The man with two watches"


Infatti è una divisione teorica dei programmi a seconda della logica
che esprimono; solitamente: presentation (l'interfaccia con l'utente
finale) - business logic (o b.rules) - data layer.
Come al solito, mantenere una rigida divisione delle competenze
permette una migliore astrazione, una più veloce evoluzione dei
prodotti, e può anche fare la felicità dei commerciali che ti
venderanno tanti bei moduli aggiuntivi :-)
Esiste una divisione ancora più articolata che è l'Ansi-Sparc
specificamente orientata ai database, ma per la maggioranza degli
scopi risulta sufficiente questa.
Tornando a noi, di solito i controlli listview hanno un attributo di
ordinamento, i report designer effettuano ordinamenti lato client
etc etc.
Per quanto riguarda l'Sql, comunque, credo che ormai sia una
battaglia persa (ormai non ci sto neppure dietro, lo svaccamento del
linguaggio procede a ritmo accelerato); direi che è un esempio di come
una cosa nata male possa finire anche peggio...
Ciao