Förslag:
[kampanjer]
intID
dteCreated
intUserID
bolIsUsed <-- true/false
***
Du har alla kampajer på ETT ställe, bara att markera vilken som är använd.
Databaser & SQLur Databashanterare & SQL
11 svar · 524 visningar · startad av Thompa__85
Hej!
Jag skulle behöva lite hjälp här med ett join-problem.
Så här är upplägget:
I kampanjer_new listar jag olika kampanjer där varje kampanj har ett unikt kampanj_id.
I kampanjer_done listar jag de kampanjer som varje medlem har förbrukat. intMember för medlemmens idnummer och intKampanj för kampanjens id.
Nu vill jag på min kampanjsida göra så att de kampanjer man redan förbrukat Inte dyker upp i listan. Och då behöver jag en join för att det ska gå snabbt och smidigt.
Så här långt har jag kommit:
SQL = "SELECT k.kampanj_id, k.strTitel, k.strImp, k.strText, k.intGratis, k.strDatum, k.strPic, k.filter18, k.filter15, k.filter25, " _
& "k.intTjej, k.intNyh, k.intTav, k.intErb, k.intGra, k.intAntal, k.strProd, d.intMember, d.intKampanj " _
& "FROM kampanjer_new k join kampanjer_done d on d.intMember = "& lngID &" " _
& "WHERE bla bla bla"
Hur lägger jag in en kontroll för att se om medlemmen har utnyttjat kampanjen eller ej.
Hoppas ni förstår :)
mvh Andreas
Förslag:
[kampanjer]
intID
dteCreated
intUserID
bolIsUsed <-- true/false
***
Du har alla kampajer på ETT ställe, bara att markera vilken som är använd.
Eclipse skrev:
Förslag:
[kampanjer]
intID
dteCreated
intUserID
bolIsUsed <-- true/false***
Du har alla kampajer på ETT ställe, bara att markera vilken som är använd.
Hängde inte riktigt med där? :r
Flyttas från ASP
SQL = "SELECT k.kampanj_id, k.strTitel, k.strImp, k.strText, k.intGratis, k.strDatum, k.strPic, k.filter18, k.filter15, k.filter25, " _
& "k.intTjej, k.intNyh, k.intTav, k.intErb, k.intGra, k.intAntal, k.strProd " _
& "FROM kampanjer_new k " _
& "WHERE not exists " _
& "(select * from kampanj_done d where d.kampanj_id = k.kampamj_id and d.intMember = " _
& lngID & ")"
LarsG skrev:
SQL = "SELECT k.kampanj_id, k.strTitel, k.strImp, k.strText, k.intGratis, k.strDatum, k.strPic, k.filter18, k.filter15, k.filter25, " _ & "k.intTjej, k.intNyh, k.intTav, k.intErb, k.intGra, k.intAntal, k.strProd " _ & "FROM kampanjer_new k " _ & "WHERE not exists " _ & "(select * from kampanj_done d where d.kampanj_id = k.kampamj_id and d.intMember = " _ & lngID & ")"
Tack!
Det fungerar, dock tar det fortfarande grymt lång tid att få fram resultaten. (Måste söka igenom 300.000 poster för varje kampanj..).
Samt att jag inte lyckas få in min Where-sats som jag hade i orginal-koden. Finns det nåt annat sätt så jag kan få det mer snabbladdat?
Hur ser tabellerna ut? Med smart design borde inte 300 rader ta lång tid att söka igenom.
überfuzz skrev:
Hur ser tabellerna ut? Med smart design borde inte 300 rader ta lång tid att söka igenom.
Kampanjer_new:
kampanj_id, samt en del information om kampanjen.
Kampanjer_done:
intKampanj, intMember
Så när jag ska skriva ut kampanjerna så vill jag att de kampanjer som är förbrukade av medlemmen ej visas i listan.
IF intKampanj = kampanj_id Where intMember = mitt ID Then
'Visa inte
Så är det ju kortfattat, men får inte det att ladda snabbt :/
Tips?
Nu fick jag till så att det fungerar.
SQL = "SELECT k.kampanj_id, k.strTitel, k.strImp, k.strText, k.intGratis, k.strDatum, k.strPic, k.filter18, k.filter15, k.filter25, " _
& "k.intTjej, k.intNyh, k.intTav, k.intErb, k.intGra, k.intAntal, k.strProd " _
& "FROM kampanjer_new k " _
& "WHERE not exists " _
& "(select * from kampanjer_done d where d.intKampanj = k.kampanj_id and d.intMember = " _
& lngID &") AND intGra = '1' "
Response.Write SQL
Set RS = Connect.execute(SQL)
Dock tar det förbaskat lång tid att ladda sidan, ca 20 sekunder.. Trodde det jag skulle slippa med join?
Testa
SELECT k.kampanj_id
, k.strTitel
, k.strImp
, k.strText
, k.intGratis
, k.strDatum
, k.strPic
, k.filter18
, k.filter15
, k.filter25
, k.intTjej
, k.intNyh
, k.intTav
, k.intErb
, k.intGra
, k.intAntal
, k.strProd
FROM kampanjer_new k
LEFT
JOIN kampanjer_done d
ON k.kampanj_id = d.intKampanj
AND d.intMember = lngId
WHERE d.intKampanj IS NULL
AND k.intGra = '1'
Peter S skrev:
Testa
SELECT k.kampanj_id , k.strTitel , k.strImp , k.strText , k.intGratis , k.strDatum , k.strPic , k.filter18 , k.filter15 , k.filter25 , k.intTjej , k.intNyh , k.intTav , k.intErb , k.intGra , k.intAntal , k.strProd FROM kampanjer_new k LEFT JOIN kampanjer_done d ON k.kampanj_id = d.intKampanj AND d.intMember = lngId WHERE d.intKampanj IS NULL AND k.intGra = '1'
Koden fungerar, men tar fortfarande riktigt lång tid att ladda.. upp emot 20-30 sekunder.
Är det för att den söker igenom 300.000 poster som det tar sån tid?