erkaMedlem sedan dec. 19994 597 inlägg
Hmmm brukar inte det här fungera eller är jag helt trött och störd idag.
strSQL = "SELECT * FROM DistributorProduct WHERE DistId EXISTS IN "_
&"(SELECT * FROM Distributors WHERE Countryname_ID = "& IntCountryId &") "
Vad jag försöker göra är alltså att plocka ut de från DistributorProduct vars DistId finns i distributors där deras CountryName_Id är någonting, tex SE
hjälp :)
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
LarsGMedlem sedan dec. 200012 465 inlägg
strSQL = "SELECT * FROM DistributorProduct WHERE DistId IN "_
&"(SELECT distid FROM Distributors WHERE Countryname_ID = "& IntCountryId &") "
Lite kontamination där.
------------------
essentitia preter non sans multiplicandum
erkaMedlem sedan dec. 19994 597 inlägg
tack larsg, min skalle är not kontaminerad av något underligt virus
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
erkaMedlem sedan dec. 19994 597 inlägg
Det fungerar ändå inte som jag tänkt mig *suck* Jag har i distributorsproduct 4 olika produktgrupper som är en bit, det finns också DistID så man kan se om en Disitrbutör har den produkten eller inte, vad jag vill åstakomma blir lättare att förstå med följande scenario.
Jag väljer land England och får CountryName_ID = 23. Nu ska jag kolla om det i hela england finns distributörer till alla produktgrupper.
strSQL = "SELECT DISTINCT * FROM DistributorProduct WHERE DistId IN "_
&"(SELECT distid FROM Distributors WHERE Countryname_ID = "& IntCountryId &") "
Så om det i england säljs alla produktgrupper utom nr4 ska det bli detta resultat vid utskrift
True,True,True,False. Men om alla distributörer tillsammans täcker alla 4 grupper blir det True,True,True,True osv.
Någon som förstår vad jag menar ?
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
LarsGMedlem sedan dec. 200012 465 inlägg
Jo, det var ju något helt annat.
Jag förstår vilket resultat du vill ha, men jag får inte ihop alla bitar.
distributorsproduct 4 olika produktgrupper
Är det fyra olika poster eller fyra olika kolumner?
Hur syns det i Distributors att den säljer en viss produktgrupper?
------------------
essentitia preter non sans multiplicandum
erkaMedlem sedan dec. 19994 597 inlägg
Ok. Jag har en tabell som heter
DistributorProduct
-DistId (vilken dist det är, relation till DistId i Distributors)
-CD (bit, 1 om han har denna)
-VINYL (bit, 1 om han har denna)
-CLOTHES (bit, 1 om han har denna)
-ACCES (bit, 1 om han har denna)
Sen en tabell som heter
Distributors
DistId - Räknare
CountryName_ID (Vilket land han finns i)
massa andra fält med uppgifter om distributören
jag gör en distributörsvisningssida, där man först listar alla i valt land men har möjligheten genom en dropdownmeny att selectera valt land och produktgrupp. Först tex jag väljer england, alla distr. i england listas, sen om jag väljer Clothes i menyn skickas man till en sida som plockar ut och visar de distr. i england som har Clothes. Det jag behöver det vi håller på med (du och jag) är för att om ett land inte har någon distr. som säljer kläder ska inte heller kläder komma upp i droppdownmenyn. Förstår du mer nu?
tack!
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
[Redigerat av erka den 07 feb 2002]
LarsGMedlem sedan dec. 200012 465 inlägg
Med den datamodellen så blir det något komplicerat.
select case when exists (select 1 from distributorProduct dp inner join distributor d
on dp.distid = d.distid
where d.CD = 1) then 'true' else 'false' end as CD,
case when exists (select 1 from distributorProduct dp inner join distributor d
on dp.distid = d.distid
where d.VINYL = 1) then 'true' else 'false' end as VINYL,
case when exists (select 1 from distributorProduct dp inner join distributor d
on dp.distid = d.distid
where d.CLOTHES = 1) then 'true' else 'false' end as CLOTHES
case when exists (select 1 from distributorProduct dp inner join distributor d
on dp.distid = d.distid
where d.ACCESS = 1) then 'true' else 'false' end as ACCESS
------------------
essentitia preter non sans multiplicandum
erkaMedlem sedan dec. 19994 597 inlägg
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
[Redigerat av erka den 07 feb 2002]
erkaMedlem sedan dec. 19994 597 inlägg
Är det en korkad datamodell förutom att det inte är smart att ha DistributorProducts så eftersom den växer på bredden om man slänger in mer produktgrupper, skulle kunnat ha en länktabell där jag satt in produktgrupp och distid, samt en tabell som hanterar produktgrupperna. Men nu är det inte jag som byggt databasen och en del andra applikationer använder den :(
Stort tack larsg!
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
LarsGMedlem sedan dec. 200012 465 inlägg
Jo, det är ju alltid bättre att lägga saker som separata poster än att lägga till flera kolumner, så jag tycker att du borde bryta ut produktgrupperna till en separat tabell.
Om du lägger dessa som enskilda rader så behöver du inte ändra på någon fråga om du lägger till någon produktgrupp.
------------------
essentitia preter non sans multiplicandum
erkaMedlem sedan dec. 19994 597 inlägg
Ska gå igenom vad den används till exakt databasen, kommer nog bygga om den. Hittade ett fel LarsG, alla "where d.CD = 1" osv ska vara dp.CD osv. ;) Tack igen!
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
erkaMedlem sedan dec. 19994 597 inlägg
Hmmm nu får jag ju true överallt eftersom jag inte lyckas få in lands aspekten så att säga, måste ju skriva where CountryName_ID = "& IntCountryId &" någonstanns, men var, lyckas inte få det att fungera..hmm
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
LarsGMedlem sedan dec. 200012 465 inlägg
Du får stoppa in det i varje delfråga
str = "select case when exists (select 1 from distributorProduct dp inner join distributor d on dp.distid = d.distid
where dp.CD = 1 and Countryname_ID = " & IntCountryId &
") then 'true' else 'false' end as CD "
och så vidare.
------------------
essentitia preter non sans multiplicandum
erkaMedlem sedan dec. 19994 597 inlägg
he he jag hade skrivit d.Countryname_ID vid varje men det fungerade ju inte ;) Tack igen, ska inte störa mer.
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
erkaMedlem sedan dec. 19994 597 inlägg
Hej igen LarsG :) Jag gör lite tester med en länktabell och har nu följande tabeller
PGroups
-ProductGroupId (PK,Int med identity)
-ProductGroupName (Char)
PGroupLink
-DistId (FK, int, relaterad till Distributors.DistId)
-ProductGroupId (int, relaterad till PGroups.ProductGroupId )
Skrev ett litet snabb script för att få ut samma resultat som vi har fått med tidigare hjälp
strSQL2 = "SELECT DISTINCT * FROM PGroupLink WHERE DistId IN "_
&"(SELECT distid FROM Distributors WHERE Countryname_ID = "& IntCountryId &") "_
&"ORDER BY ProductGroupId ASC"
ArrRS2 = Cn.Execute(strSQL2).getrows()
strGroup = ""
For y = 0 to ubound(ArrRS2,2)
If ArrRs2(1,y) <> strGroup Then
Response.Write "<br>"& ArrRs2(1,y) &"<br>"
Select Case ArrRs2(1,y)
Case "1"
Response.Write"Grupp1"
Case "2"
Response.Write"Grupp2"
Case "3"
Response.Write"Grupp3"
Case "4"
Response.Write"Grupp4"
End Select
End If
strGroup = ArrRs2(1,y)
Next
Erase ArrRs2
Ser du någon smidigare sqlfråga i ditt djuptstorakunskapsföråd om sql :) Har du inte tid så spelar det inte så stor roll, det fungerar men är nog inte optimalt, snabbare än tidigare kod iaf.
------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !
LarsGMedlem sedan dec. 200012 465 inlägg
select case when count(pgl.distid) > 0 then 'true' else 'false' end as distributorExists,
pg.ProductGroupName
from Pgroups as pg left outer join Pgrouplink as pgl on pg.productGroupid = pgl.productGroupid
left outer join Distributors as d on pgl.distid = d.distid and d.Countryname_ID = 4711 -- eller nåt
group by pg.ProductGroupName
ORDER BY pg.ProductGroupName
Då får du gruppnamnet också, så då behöver du inte asp-koden.
------------------
essentitia preter non sans multiplicandum