webForumDet fria alternativet

klurig SQL optimeringsfråga (LarsG mfl.??)

3 svar · 255 visningar · startad av Eclipse

EclipseMedlem sedan juli 20003 825 inlägg
#1

Jag använder Access och asp.

Frågan går ut på att jag har företag, company, och jag ska redigera mitt företag

... where companyID = 23 inte så svårt.

***
Men nu är det så att dom företagen som finns på sajten kan ha olika kategorier. Det finns just u fyra kategorier.

Kategorierna är Företagsregister, Restaurang, Konstnärer, Mäklare/hyresvärdar.

Som admin markerar jag vilka företag som ska finnas med i vilka kategorier (utom den första).

Nu vill jag har en fråga som genererar ett svar som är i stil med

intID, strName, intsortfield
TRUE, FALSE, FALSE, FALSE

***
Ett alternativ jag tänkt på är att jag kan räkna varje gång. (SELECT COUNT(*) FROM companyType ct WHERE c.intID = ct.CompanyID)

Det blir ju då 1 eller 0... ja, det är det bästa jag kan komma på!

EclipseMedlem sedan juli 20003 825 inlägg
#2

intID, strName, intsortfield
, (SELECT COUNT(*) FROM companyType ct WHERE c.intID = ct.CompanyID AND ct.intCompanyTypesID = 3)

Lite rörigt, det finns tre tabeller, commpany, companyType, companyTypes

[companyType] -- tre rader
intID
intCompanyID
intCompanyTypesID

EclipseMedlem sedan juli 20003 825 inlägg
#3
Kan man skriva detta snyggare??

SQL = "SELECT c.intID, c.strName, c.dteCreated, c.bolView " _
	& ", u.intID, cc.intID " _
	& ", (SELECT COUNT(*) FROM companyType ct WHERE ct.intCompanyID = c.intID AND ct.intCompanyTypesID = 2 )" _
	& ", (SELECT COUNT(*) FROM companyType ct WHERE ct.intCompanyID = c.intID AND ct.intCompanyTypesID = 3 )" _
	& ", (SELECT COUNT(*) FROM companyType ct WHERE ct.intCompanyID = c.intID AND ct.intCompanyTypesID = 4 )" _
	& ", (SELECT COUNT(*) FROM companyType ct WHERE ct.intCompanyID = c.intID AND ct.intCompanyTypesID = 1 )" _
	& " FROM company c, users u, companyCrew cc " _
	& " WHERE cc.intUserID = " & session("userID") _
	& " AND cc.intUserID = u.intID " _
	& " AND cc.intCompanyID = c.intID " _
	& " ORDER BY c.strName;"
set mySQL = Conn.Execute(SQL)
HansenMedlem sedan aug. 2000374 inlägg
#4

Om det är snyggare vet jag inte, men effektivare:

    SELECT c.intID,
         c.strName,
         c.dteCreated,
         c.bolView,
         u.intID, 
         cc.intID,
         SUM ( CASE WHEN ct.intCompanyTypesID = 2 THEN 1 ELSE 0 END ),
         SUM ( CASE WHEN ct.intCompanyTypesID = 3 THEN 1 ELSE 0 END ),
         SUM ( CASE WHEN ct.intCompanyTypesID = 4 THEN 1 ELSE 0 END ),
         SUM ( CASE WHEN ct.intCompanyTypesID = 1 THEN 1 ELSE 0 END )
    FROM company AS c,
         users AS u,
         companyCrew AS cc,
         companyType AS ct
   WHERE cc.intUserID = :userID
     AND cc.intUserID = u.intID
     AND cc.intCompanyID = c.intID
     AND ct.intCompanyID = c.intID
ORDER BY c.strName
128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)