Newsgroup: it.lavoro.professioni.webmaster
Titolo: ottimizzando script [lungo - riflessione]

salve amici del ng.
Come preannunciato in un precedente post sto realizzando uno script per la
gestione di un sistema multi newsletter che poi renderò libero.
In pratica ogni utente iscritto potrà tramite una pagina
iscriversi/disiscriversi contemporaneamente ad una o più newsletter.
Ora sono giunto ad un dubbio che secondo me è cruciale.
In pratica attualmente ho organizzato così il db per qaunto riguarda
l'allocazione delle email a ciascuna newsletter.:
iscritti(idiscritto, email , ecc...)
newsletter(idcorrelazione,idnewsletter, idiscritto)
in questo modo ottimizzo molto la gestione del db perchè avrò nella tabella
newsletter esclusivamente  record relativi a ciascun iscritto.
quando devo inviare una newsletter faccio una query su table newsletter
impostando come where l'idnewsletter e in contemporanea faccio un join con
table iscritti per ottenere il sotto insieme di dati che mi occorre(email,
nomeiscritto, ecc.).
vengo quindi alla mia richiesta....
In questo modo ho risolto il problema d'invio, ma per quando riguarda la
gestione utente, avrei uno script lentissimo client side, poichè ogni volta
che un utente fa qualche azione dovrebbe far partire una subrutine che
esamina la tabella newsletter.
ci sarebbe però un'altra strada... (suggeritami da un amico...visuddhi)
elimino la tabella newsletter e aggiungo il campo "stato" in iscritti.
Stato dovrebbe essere una stringa di 0  e 1, una stinga binaria insomma, che
ad ogni id iscritto abbina in maniera biunivoca la newsletter giusta.
In questo modo avrei sicuramente uno scirpt più performante sia server che
client side, dovendo  di volta in volta manipolare solo una stringa binaria.
Il problema è come la gestisco? ok in lettura mi metto a splittare e poi
faccio un ciclo for che assegna ad un dato num di variabili equipollente
alla stringa?
Poi però in scrittura come faccio a dire che per es. la terza cifra deve
essere cambiata in uno 0  o in un 1?
qualche riga d'esmpio?
Tks!
--
Francis Mule
---------------------------------
Http://www.LucaniaNet.it
Http://www.DreamCoding.com
Mi trovi su ICQ: #143382857
---------------------------------

 l'allocazione delle email a ciascuna newsletter.:
[Supercut]
E se piuttosto facessi una tabella molti a molti con id utente e id 
newsletter?
3 Tabelle, qualche indice, e le performance aumentano ....
Cla
-- 
www.claudioerba.com
 - Consulenza web per l'azienda
www.spaghettibrain.com
 - PHPNUke Italian Mirror (Da oggi anche Hosting!)
www.spaghettilearning.com
 - Piattaforma open Source per l'E-Learning
My ICQ: 14187053
--

 subrutine che esamina la tabella newsletter.
questa e' un'operazione lato server...
il discorso del campo binario potrebbe andar bene... ma per come e' il tuo
db penso che una semplice JOIN non appesantisca proprio niente... quindi il
tuo dubbio e' infondato...
--
Lino Mari [mod - it.economia.e-commerce]
http://www.ebow.it
 - e-business on web!
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - d2D004
I consigli sono una forma di nostalgia.


Lino il problema è nel sistema di iscrizione/disiscrizione...
Dovrei leggere n variabili che mi provengono dal form, andare a vedere per
quella data email qual'è la situazione correnete e modificare eventualmente
quelloc he c'è da modificare!
Questo richiederebbe un pò di tempo non trovi?


Interessante... spiegati meglio...

 vengo quindi alla mia richiesta....
cut-
io farei cosi:
tabella iscritti (idutente,etc)
tabella newsletter (idnewsletter etc)
tabella iscritti_newsletter (idutente, idnewsletter, iscrittoSiNo)
dove iscrittoSiNo è un campo vero/falso.
che è molto facile da gestire (due join) anche in caso di modifiche
da parte degli utenti, poi (oltre ai soliti indici) indicizzi
iscritti_newsletter
per iscrittoSiNo cosi sveltisci l'invio.
.M


Intendo:
Le tue due tabelle:
iscritti(idiscritto, email , ecc...)
newsletter: nome newsletter e tutti i vari fronzoli
iscrizioni: id utente id newsletter Iscritto (1 o 0)
Cosě ad ogni operazione che l'utente fa (iscrizioni, disiscrizioni) 
basta un controllo sulla tabella iscrizioni, se il record esiste allora 
fai un update, sennň crei il record ... in questo modo l'utente puň 
iscriversi, disiscriversi a infinite newsletter ...
Ciao


 
A leggerti non gli avrei ri-risposto :-)))


 Questo richiederebbe un pò di tempo non trovi?
e' trascurabile...



Cla, io ho già fatto proprio come dicevi tu....
Peròpoi quando faccio una iscrizione opp. disiscrizione devo farmi tanti
recorset quante sono le newsletter interrogando la tabella iscrizioni
verficando con la doppia clausola wher idutente = AND  id newsletter e al
limite s euno si disiscrive da tutto, eliminare il record utente!

 .M
scusa, ma il campo iscrittoSiNo è totalmente inutile!!!! Anzi in questo modo
di devi portare dietro dei record che non ti servono.
Basta semplicemente che nella tabella iscritti_newsletters siano presenti
solo gli iscritti e risolvi!

"F.Mule" <franc...@iol.it.nospam> ha scritto nel messaggio
news:irrJ9.27428$t_1.2...@tornado.fastwebnet.it...

si ma mettiti d'accordo pero' :-) hai chiesto una soluzione
semplice non quella più leggera in termini di spazio e questa
struttura è la piu semplice da manipolare, l'unico fastidio è
in fase di aggiunta di un utente o di una newsletter perchè
devi aggungere risp. tanti record quante sono le newsletter
e tanti record quanti sono gli utenti. Poi ti trovi una struttura
facilissima da modificare (non devi cancellare o aggiungere
record se un utente si iscrive o si cancella da una newsletter
ma solo settare il bit iscrittoSiNo) inoltre se applichi l'integrità
referenziale quando vai a cancellare un utente o una newsletter
si porta via da solo anche tutti i record correlati che non servono più....

 si porta via da solo anche tutti i record correlati che non servono
più....
Se avessi letto attentamente il 3D avresti visto che io sono partito proprio
da una soluzione che è già migliore di quella che indichi tu!
Non ti serve avere una  tabella iscrizioni in cui ci metti na casella sì/no!
Facendo così sei costretto a replicare pe rogni email esattamente n record
se n sono le newsletter!
Nella prima soluzione  da me proposta, invece nella tabella iscrizioni
inserisco solo record relativo a email pertinenti con un evidente risparmio
di tempo!
Cerchiamo di esplorare la via della stringa binaria!

 Cerchiamo di esplorare la via della stringa binaria!
ipotizza una cosa di questo tipo...
(il file l'ho chiamato news.asp e richiama se stesso in alcuni punto dello
script)
<%
' emulazione dati estratti da un database
 news = array("prima","seconda","terza","quarta","quinta")
 nomi = array("visuddhi","francis","gerlinde","malcom","pamela","roberto")
 iscr = array("01101","11101","00001","10001","11101","00001")
' funzione di lettura delle iscrizioni
function estrai(n)
 for i = 0 to ubound(news)
  estratto = mid(iscr(n),i+1,1)
  if estratto = 0 Then msg = "N" Else msg = "S"
  estrai = estrai & " <a href=""news.asp?act=mod&n=" & n & "&p=" & i+1 & """>" &
msg & "</a> "
 next
end function
' subroutine di modifica dell'iscrizione alla news
sub modifica(n,p)
 for i = 0 to ubound(news)
  estratto = mid(iscr(n),i+1,1)
  if i = p then if estratto = 0 then estratto = 1 else estratto = 0
  newiscr = newiscr & estratto
 next
 iscr(n) = newiscr
end sub
' se richiesta la modifica la attua
if request("act") = "mod" Then modifica request("n"),request("p")
' elenca i valori presenti in 'archivio'
for x = 0 to ubound(nomi)
 stringa = estrai(x)
 Response.Write iscr(x) & " - " & nomi(x) & stringa & "<br />"
next
%>
dato che non ho un archivio ho usato degli array.
ti crea per ogni iscritto una riga con stringa binaria, nome e delle S o N che
indicano se iscritto Si o iscritto No.
se cliccli sulle S vari l'impostazione da Si a No e viceversa.
nella rilettura del file i dati non cambiano perchè qui ogni volta legge gli
array in testa allo script, ma se sostituisci gli arrai a dati presi da un
archivio hai una base di partenza.
non ho fatto una prova con un archivio e quindi non ho testato completamente il
procedimento.. sono andato 'sulla fiducia' :)
--
visuddhi { info(at)
visuddhi.com
 }
if it is to be, it is up to me { 
www.visuddhi.com
 }
{ icq# 44339752 }

 Cerchiamo di esplorare la via della stringa binaria!
se sei sotto Access non ti conviene perchè non possiede
funzioni per trattare i numeri realmente come numeri binari,
quindi dovresti trattare quelle cifre come caratteri di una stringa
ed è una soluzione pessima sotto il profilo delle prestazioni, molto
meglio la prima che hai detto.

 Francis Mule
Ciao ,
Octopus


Riflettendoci, la soluzione con una stringa binaria, oltre a tutti qyesti
problemi, avrebbe:
Pro:
- elimino una tabella in cambio di un campo in più nella tabella utenti
- l eoperazione clientside sarebbero più veloci
Contro:
- se inserico una nuova lista devo correggere il vecchio campo con tutti 0
Deciso, torno sulla strada iniziale e vedo di ottimizzare le procedure di
iscrizione/disiscrizione
tks a tutti!



Ciao,
Octopus


vabbe', sarà anche un cruccio, ma uno deve sempre cercare di migliorarsi
!?!?!
Il ng. io lo vivo molte volte così, proprio come un mezzo tramite il quale
si strova altra gente con cui confrontarsi e crescere!
Grazie!
