Avatar billede Slettet bruger
01. september 2004 - 15:22 Der er 2 kommentarer og
1 løsning

Hente data uden dubletter på baggrund af en valgt produktgruppe

Hej

Jeg har en foto-produktdatabase, hvor de enkelte produkter indeholder et ukendt antal farvekoder, defineret i et felt som en kommasepareret string.

Jeg ønsker at finde alle farvekoderne uden dubletter for et ukendt antal produkter

F.eks:
Jeg søger på "produkt 10, produkt 12 og produkt 14" i databasen:


produkt 10 indeholder feltet 'farvekode' med value ="100,120,300,700"
produkt 12 indeholder feltet 'farvekode' med value ="100,150,200"
produkt 14 indeholder feltet 'farvekode' med value ="90,100,300,500"

Det skal generere et output som: "90,100,120,150,200,300,500,700"


Hvordan griber jeg det bedst an??

Noget i stil med..?
(ikke afprøvet kode - blot et eksempel på samme)

' *************************************
' gruppen af produkter requestes som en string;

produktgruppe="10,12,14"
arr = Split(produktgruppe,",")

If isArray(arr) Then
    For i = 0 To uBound(arr)
    SQL_WHERE = SQL_WHERE & "(produkt_id = "&arr(i)&") AND "
    Next
End If


SQL="Select * FROM produkt WHERE "&SQL_WHERE&" (Aktiv=true)"

' *************************************

- men hvordan får jeg farvekoderne grupperet og sorteret i forhold til valgte produktgruppe -

mvh, Michael
Avatar billede eagleeye Praktikant
01. september 2004 - 16:58 #1
Du skal havde OR imellem produkt_id eller tager den ingen poster med ud.

Koden kunn være noget i stil med dette:


produktgruppe="10,12,14"
arr = Split(produktgruppe,",")

If isArray(arr) Then
    For i = 0 To uBound(arr)
      SQL_WHERE = SQL_WHERE & "(produkt_id = "&arr(i)&") "
      if i<uBound(arr) then SQL_WHERE=SQL_WHERE & " OR "
    Next
End If
if SQL_WHERE <> "" then SQL_WHERE = "(" & SQL_WHERE & ") AND "

SQL="Select * FROM produkt WHERE "&SQL_WHERE&" (Aktiv=true)"

Set rs = Conn.Execute(SQL)

strTmp=""
do while not rs.EOF
  strTmp=strTmp&","&rs("farvekode")
  rs.Movenext
loop
strTmp=mid(strTmp,2)
arrFarver=split(strTmp,",")
strFarve=","
for i = to ubound(arrFarver)
  if inStr(1,strFarve,","&Trim(arrFarver(i))&",")=0 then
    strFarve=strFarve & Trim(arrFarver(i)) & ","
  end if
next
if len(strFarve)>1 then strFarve = Mid(strFarve,2,len(strFarve)-2)

response.write strFarve
Avatar billede hiks Nybegynder
01. september 2004 - 17:49 #2
hvorfor bruger du ikke bare where produkt_id IN (" & produktgruppe & ") ? istedet for at splitte?

/hiks
Avatar billede Slettet bruger
01. september 2004 - 20:42 #3
eagleeye >> Det er lige efter drejebogen :) - takker mange gange!

hiks >> Kender ikke til metoden, men det skal dog lige tilføjes at ovenstående bare er en pseudokode for at belyse min hensigt. Den oprindelige kode er med helt andre kriterier og valg - og der findes faktisk ikke nogen specifikke produktgrupper i db'en.

Tak til jer begge, Michae(:
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester