webForumDet fria alternativet

Join-problem

11 svar · 524 visningar · startad av Thompa__85

Thompa__85Medlem sedan aug. 2002600 inlägg
#1

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

EclipseMedlem sedan juli 20003 825 inlägg
#2

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.

Thompa__85Medlem sedan aug. 2002600 inlägg
#3

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

ZaimanMedlem sedan dec. 20014 239 inlägg
#4

Flyttas från ASP

LarsGMedlem sedan dec. 200012 464 inlägg
#5
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 & ")"
Thompa__85Medlem sedan aug. 2002600 inlägg
#6

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?

überfuzzMedlem sedan apr. 2006409 inlägg
#7

Hur ser tabellerna ut? Med smart design borde inte 300 rader ta lång tid att söka igenom.

Thompa__85Medlem sedan aug. 2002600 inlägg
#8

ü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?

Thompa__85Medlem sedan aug. 2002600 inlägg
#9

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?

Peter SMedlem sedan dec. 20025 483 inlägg
#10

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'
Thompa__85Medlem sedan aug. 2002600 inlägg
#11

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?

Thompa__85Medlem sedan aug. 2002600 inlägg
#12

Edit:
Ändrade index på intKampanj och nu verkar de rulla på bra.

Tack för all hjälp :)

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)