archimede ha scritto:Riguardo all'altra questione (e poi la smetto) continuo a non capire. Il bello delle query dentro al db è che "rimuovono" la complessità dalle tue pagine. Quale vantaggio ti dà avere una SELECT di 20 righe in una pagina ASP invece di un semplice SELECT * FROM query_nel_db? Io preferisco di gran lunga il secondo approccio: codice più chiaro e maggiormente "portabile".
Ti do in parte ragione se usi una query in un mdb stand-alone che puoi aprire con il programma Access.
Nel mio caso sto utilizzando un mdb che si trova su un host al quale ho bisogno di accedere tramite una connessione ADODB. Per cui penso sia più performante creare una query diretta nelle istruzioni ASP anzichè utilizzare una query main che richiama delle sottoquery all'interno di una pagina web ma non è detto che io abbia ragione... e poi comunque ammetto che non so come si faccia a passare dei parametri da una query ad un'altra già memorizzata nel mdb (giorno, mese, anno)... magari è un aspetto che affronterò più avanti...
Ieri notte ho trovato una soluzione che cercherò comunque di ottimizzare ma qui forse rischio di andare OT perchè inizio sto parlando di programmazione pagine web con l'utilizzo del DB di Access: in pratica estraggo una prima tabella da questa stringa
- Codice: Seleziona tutto
strSqlListaIP = "SELECT * FROM (select datanav,ip,min(minimo) as logminimo,sum(defaultasp) as logdefaultasp,sum(totpagine) as totalepagine FROM (SELECT * FROM (SELECT * FROM (SELECT DISTINCT tabellaip.DataNav, tabellaip.ip,min(tabellaip.idlog) as minimo, count(tabellaip.pathdir)/count(tabellaip.pathdir) as defaultasp,count(tabellaip.pathdir) as totpagine FROM (SELECT DateValue(DataNavigazione) AS DataNav,ipaddress as ip,idlog, pathdir FROM log where month(DataNavigazione)=" & request("mese") & " AND year(DataNavigazione)=" & request("anno") & ") AS tabellaip WHERE ( datevalue(tabellaip.DataNav)='" & request("day") & "' and pathdir like '%default.asp%') GROUP BY tabellaip.DataNav, tabellaip.ip) AS ipgiornalieri ORDER BY ipgiornalieri.minimo) UNION SELECT * FROM (SELECT * FROM (SELECT DISTINCT tabellaip1.DataNav, tabellaip1.ip, min(tabellaip1.idlog) as minimo, -count(tabellaip1.pathdir)/count(tabellaip1.pathdir) as defaultasp,count(tabellaip1.pathdir) as totpagine FROM (SELECT DateValue(DataNavigazione) AS DataNav,ipaddress as ip,idlog, pathdir FROM log where month(DataNavigazione)=6 AND year(DataNavigazione)=2006) AS tabellaip1 WHERE ( datevalue(tabellaip1.DataNav)='" & request("day") & "' and pathdir not like '%default.asp%') GROUP BY tabellaip1.DataNav, tabellaip1.ip) AS ipgiornalieri1 ORDER BY ipgiornalieri1.minimo)) GROUP BY datanav,ip) AS listacli ORDER BY listacli.logminimo"
set rsListaIP = Server.CreateObject("ADODB.Recordset")
rsListaIP.open strSqlListaIP, db, 3, 3
Estraggo in questo modo la data di navigazione (datanav), tutti gli IP che hanno visitato in una certa data il sito (IP), il primo progressivo nel contatore dei log in base al quale faccio l'ordinamento della query(logminimo), controllo della visita al default.asp (logdefaultasp) e numero totale di pasite visitate durante il giorno (totalepagine).
Faccio anche una seconda estrazione (quella che purtroppo non riesco ad ordinare come vorrei):
- Codice: Seleziona tutto
strSqlListaOr = "TRANSFORM Count(*) AS ConteggioDiIDlog SELECT IPAddress,min(idlog) as minimolog FROM log WHERE DateValue(datanavigazione)='" & request("day") &"' GROUP BY IPAddress PIVOT Format([DataNavigazione],'h') In ('0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23')"
set rsListaOr = Server.CreateObject("ADODB.Recordset")
rsListaOr.open strSqlListaOr, db, 3, 3
Qui estraggo gli IP (IPAddress), (minimolog) come nell'estrazione della prima query e, ora x ora, tutte le navigazioni effettuate dall'IP (0,1,2,3...).
Ora le due tabelle hanno lo stesso numero di righe ma hanno ognuna un ordinamento differente. Se fossi riuscita a creare una JOIN ad hoc con un'unica istruzione SQL avrei potuto avere una tabella completa (magari riducendo i tempi di esecuzione della query). Nella situazione da me adottata devo purtroppo:
a - con un ciclo DO-LOOP leggere riga per riga i dati della tabella estratta dalla prima query
b - con un altro ciclo DO LOOP, nidificato dentro al ciclo DO-LOOP cui sopra, leggere riga per riga i dati della tabella estratta dalla seconda query e quando trovo la corrispondenza della prima tabella con la seconda (IP=IPAddress) pubblico il risultato dentro una <table></table>.
Questa mia soluzione al momento può bastare perchè nel giro di 5-6 secondi al massimo (con un numero di utenti giornalieri inferiore a 100) riesco a costruire la pagina web con il dettaglio delle navigazioni in una certa data (request("day")). Prima di ieri sera la creazione della pagina web durava minimo 2-3 minuti!!!
Anche se non sono riuscita ad ottenere ciò che avrei voluto, lo scambio di idee come vedi mi è servito parecchio. Grazie Archimede!