Toon posts:

[asp] hoe pak ik dit aan?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een nieuwsbrief maken voor gebruikers; die nieuwsbrief bestaat uit 35 items, ik wil dat de gebruikers zelf kunnen aangeven welke items ze willen en dat deze voorkeuren worden opgeslagen; hoe kan ik dit het beste opslaan?

Ik kan natuurlijk een tabel maken die je koppelt aan een UserID waarin alle 35 velden staan met true/false. Maar das nogal veel werk; is het verstandiger om het gewoon op te slaan in een tekst-veld met een komma tussen de verschillende items.. dus zoiets als

'1, 3, 6, 21, 29'

Dat zou dan willen zeggen dat deze user de items 1, 3, 6, 21 en 29 per mail krijgt toegestuurd. Iemand een id hoe ik dit het beste kan aanpakken? thx

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Verwijderd schreef op 22 augustus 2002 @ 10:31:
Ik wil een nieuwsbrief maken voor gebruikers; die nieuwsbrief bestaat uit 35 items, ik wil dat de gebruikers zelf kunnen aangeven welke items ze willen en dat deze voorkeuren worden opgeslagen; hoe kan ik dit het beste opslaan?

Ik kan natuurlijk een tabel maken die je koppelt aan een UserID waarin alle 35 velden staan met true/false. Maar das nogal veel werk; is het verstandiger om het gewoon op te slaan in een tekst-veld met een komma tussen de verschillende items.. dus zoiets als

'1, 3, 6, 21, 29'

Dat zou dan willen zeggen dat deze user de items 1, 3, 6, 21 en 29 per mail krijgt toegestuurd. Iemand een id hoe ik dit het beste kan aanpakken? thx
Nee je eerste idee klinkt veel beter.....
En is volgens mij Database technisch correct!

(ik heb het over de koppel tabel )

Programmer - an organism that turns coffee into software.


Verwijderd

Je kan beter een referentietabel erbij maken waarin je het userID zet en het item. Per item komt er een entry bij. Op die manier kun je in de toekomst nog eens items weghalen/toevoegen zonder dat je de tabellen moet wijzigen.
Als je comma separated gaat opslaan, waarom dan niet direct naar textfile(?), je werkt met een database hoor :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Ik ben dezelfde mening toegedragen als K3

Tip: lees eens iets over normalizeren

https://fgheysels.github.io/


Verwijderd

Beide oplossingen zijn mogelijk. Er is in VB en ik meen ook in VB-script een functie Split(string, separator). Dit levert een array op die de dan weer kan doorlopen. In jou geval zou dat iets opleveren in de trant van:

usrArray = Split(objRS("Userprefs"), ",")

dit is dus ook uitbreidbaar. enige nadeel hieraan is dat als een nr vervalt, je een iets uitgebreidere zoek en vervang moet maken om het vervallen nummertje te verwijderen uit de userprefs. (niet onmogelijk)
ALs je de nr's opslaat als 1,2,3,4,54,65

zal zoiets worden als:
do until objRS.eof
NieuweString = objRS("Userprefs")
NieuweString = Replace(NieuweString,54,"")
NieuweString = Replace(NieuweString,",,",",")
objRS("Userprefs") = NieuweString
objRS.movenext
loop

[ Voor 0% gewijzigd door Verwijderd op 22-08-2002 10:49 . Reden: edit: ik was lekker eerder marcelloz...... :P ]


  • Marcelloz
  • Registratie: Juli 2002
  • Laatst online: 23-01 16:31

Marcelloz

IT dude with a beard

Goedkoop is op den duur duurkoop.
Ga voor de relationele aanpak en niet de houtje-touwtje aanpak.
Uiteindelijk zal de tijd voor ontwikkeling geen bal uitmaken. In plaats van een query-splitsen-verwerken doe je nu een query-verwerken. Is wellicht zelfs nog sneller :)

edit:

Danmed, irouy, ga aan je werk!
En stop 'showing-off' ;-)

There are better things in life than alcohol, but alcohol makes up for not having them.


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Verwijderd schreef op 22 augustus 2002 @ 10:46:
Beide oplossingen zijn mogelijk. Er is in VB en ik meen ook in VB-script een functie Split(string, separator). Dit levert een array op die de dan weer kan doorlopen. In jou geval zou dat iets opleveren in de trant van:


Het is zo mogelijk, maar is dat een mooie, duurzame oplossing die gemakkelijk onderhoudbaar is? Waarom moeilijk doen als het ook makkelijker (en beter) kan?

https://fgheysels.github.io/


Verwijderd

Het is zo mogelijk, maar is dat een mooie, duurzame oplossing die gemakkelijk onderhoudbaar is? Waarom moeilijk doen als het ook makkelijker (en beter) kan?
true, geef hem alleen de mogelijkheden aan. koppeltabel is mogelijk en imho ook beter qua onderhoudbaarheid en statistieken als, wat wordt nu wel en niet gebruikt.

nam aan dat hij zelf wel wist hoe de koppeltabel-manier opgelost zou worden

  • Marcelloz
  • Registratie: Juli 2002
  • Laatst online: 23-01 16:31

Marcelloz

IT dude with a beard

Mijn versie:

rs = 'select itemid_ref from tb_channels where userid_ref = 20'

i=0
while not rs.eof do
Array(i) = rs(itemid_ref)
i = i + 1
wend

:)

?? Waarom stop ik die zooi eigenlijk in een array? het staat al in een array!

There are better things in life than alcohol, but alcohol makes up for not having them.


Verwijderd

Les 1 in het nutteloos omzeten van data voor dezelfde functionaliteit:
Marcelloz schreef op 22 augustus 2002 @ 10:53:
Mijn versie:

rs = 'select itemid_ref from tb_channels where userid_ref = 20'

i=0
while not rs.eof do
Array(i) = rs(itemid_ref)
i = i + 1
wend

:)
(enige voordeel is denk als je het array in een sessie object wilt zetten)

  • Marcelloz
  • Registratie: Juli 2002
  • Laatst online: 23-01 16:31

Marcelloz

IT dude with a beard

rs kan ook in sessieobject, OleDB.Recordset is een freethreaded object dus geen probleem te verwachten met IIS.

There are better things in life than alcohol, but alcohol makes up for not having them.


Verwijderd

Topicstarter
Heren, dank voor uw reacties. Ik heb een tabel gemaakt met met drie velden, te weten:

veld 1=AutonrVeld
veld 2=userID
veld 3=itemID (dus 1 van de 35 items)

Een pagina waarbij ze kunnen zien welke items ze hebben gekozen, en welke items ze nog kunnen kiezen; als ze een item kiezen dat ze nog niet hebben wordt het toegevoegd in de tabel. ALs ze een item kiezen dat ze kwijt willen voor die entry verwijderd uit de tabel (delete ... where userID=xx and itemId=blabla..

THx

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Veld1 (autonummerveld) heb je in principe niet nodig. De PK kan je nl. leggen op de combinatie van veld1 en veld2, want die combinatie moet altijd uniek zijn.

https://fgheysels.github.io/


Verwijderd

Verwijderd schreef op 22 augustus 2002 @ 12:01:
Heren, dank voor uw reacties. Ik heb een tabel gemaakt met met drie velden, te weten:

veld 1=AutonrVeld
veld 2=userID
veld 3=itemID (dus 1 van de 35 items)

Een pagina waarbij ze kunnen zien welke items ze hebben gekozen, en welke items ze nog kunnen kiezen; als ze een item kiezen dat ze nog niet hebben wordt het toegevoegd in de tabel. ALs ze een item kiezen dat ze kwijt willen voor die entry verwijderd uit de tabel (delete ... where userID=xx and itemId=blabla..

THx
op zich leuk, maar dan heb je overal een delete knopje achter dat veldje staan!?

beter is het om de checkboxes dezelfde naam te geven en een andere value (dat heb je denk ik al gedaan, naders is je pagina nog steeds niet dynamisch qua items neerzetten). Als je dan nl request.form("MijnCHeckboxItems") doet krijg je de geselecteerde items terug in commaseparated dus: 1,3,5,6

Via de split (had ik hierboven beschreven) kan je er een array van bouwen en er doorheen lopen. Verwijder dan eerst alle items van die user, en voeg ze dan stuk voor stuk weer toe. Is wel zo netjes.

Dit is btw 1 oplossing. zijn er wel meer te bedenken

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Verwijderd schreef op 22 augustus 2002 @ 12:46:
Via de split (had ik hierboven beschreven) kan je er een array van bouwen en er doorheen lopen. Verwijder dan eerst alle items van die user, en voeg ze dan stuk voor stuk weer toe. Is wel zo netjes.
Splitten is niet nodig als je het "slim" aanpakt (je hebt dan overigens ook maar 2 queries nodig om de oude data te verwijderen en de nieuwe toe te voegen).

Today's subliminal thought is:


Verwijderd

Annie schreef op 22 augustus 2002 @ 13:14:
[...]

Splitten is niet nodig als je het "slim" aanpakt (je hebt dan overigens ook maar 2 queries nodig om de oude data te verwijderen en de nieuwe toe te voegen).
Ben nieuwsgierig !!!

details.... B)

edit:

Misschien met een outer join op die tabel zelf waarbij je de nieuwe waardes via een where clause (where itemID in (1,2,5,6)) op een null waarde achterhaald en andersom voor de verwijderde variabele!??

Pagina: 1