webForumDet fria alternativet

Kommaseparerad kolumn?

Webbutveckling

5 svar · 334 visningar · startad av Jesper T

Medlem sedan nov. 20017 144 inlägg
Frågan#1

Jag en kolumn som heter n_group.
När mina besökare signar upp sig på mitt nyhetsbrev så har de möjlighet att välja olika "kategorier" av nyhetsbrev ex.
Datorer | 3
Programvaror | 4
Litteratur | 5
osv.
Dom listar jag i en "multiselect" och värdena läggs in i n_group som kommaseparerad lista. ex 3,4,5
Detta funkar ju bra, men trixet är sedan när man skall skicka dem.
Låt säga att jag skall skicka till alla som har 3 och 5 som valda "brev".
Hur gör jag för att inte måla in mig i ett hörn?

Medlem sedan dec. 20003 563 inlägg
#2

Lite löst pratat så tycker jag att du redan gjort det.
Visst går det att lösa, men jag tror att det skulle vara snyggare och smidigare med ytterligare en tabell där du kopplar ihop varje epost adress med kategorierna som adressen har valt.
Sen är det bara att plocka ut alla poster/epostadresser för den kategori som du skall skicka ut.

Medlem sedan juni 20003 076 inlägg
#3

precis som cyprys menar:

enligt normaliseringsmetoden av databaser bör man inte spara flera värden i samma kolumn utan skapa en relationstabell istället.
kan vara värt att ha i baktanken. :)

annars, kolla in vb-script funktionen filter, med filter kan du plocka bort valda värden ur en array.
du skulle då kunna plocka bort 4:an ur 3,4,5

Medlem sedan jan. 2003296 inlägg
#4

Precis som cyprus (och doggelito) säger ser din databaslösning inte speciellt bra ut.

Om man vill spara alla värden i ett fält i en tabell så går det dock att fixa om man ändrar id:na för alla kategorier så du kan göra en "bitwise"-kontroll på n_group.

Det blir i så fall något sådant:

Datorer | 1
Programvaror | 2
Litteratur | 4
... | 8
... | 16
o s v

Då kan du spara summan av alla de valda kategorierna istället för en kommaseparerad sträng.
D v s, n_group = 5 skulle i det här fallet innebära att Datorer och Litteratur var markerade (1+4), n_group = 3 om Datorer och Programvaror är markerade (1+2)

För att hämta ut allt ur tabellen som har både Datorer och Litteratur markerat kan du då skriva något liknande det här:

SELECT * FROM Tabell WHERE (n_group & 1) > 0 AND (n_group & 4) > 0

Kommaseparerade strängar bör hur som helst inte användas för att spara diverse id:n, det är ett som är säkert.
Ovanstående lösning är då bättre, men bäst av allt är nog egentligen lösningen som cyprus föreslog - skapa en tabell till som håller koll på kopplingarna mellan adresser och kategorier.

Medlem sedan nov. 20017 144 inlägg
#5

Ni har nog rätt. Skall jag sedan administrera detta så måste kommer det att bli krångligt. Jag skapar en till tabell helt enkelt.
Tack!

Medlem sedan dec. 200012 464 inlägg
#6

Flyttas från ASP

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)