Jag sov på saken och kom på att jag skulle kunna skriva COUNT(.r.intID) i stället för stjärnan men det blir fortfarande 15...!!
Fasen, detta håller inte! :-)
12 svar · 328 visningar · startad av Eclipse
Jag har nu avsatt en hel dag åt vad jag nu tror är fel kod...
Men jag vet inte!
Strippad blir (delar av) koden så här:
SQL = "SELECT COUNT(*) " _
& ", (SELECT COUNT(*) FROM " _
& " [room] r, [hotel] h, [company] c WHERE " _
& " r.intCompanyID = c.intID AND h.intCompanyID = c.intID " _
& ") FROM [roomBooking] rb WHERE rb.dteDate =" & dteMyDate & ";"
och resultatet blir
array 0 = 0
array1 = 15...
borde bli fyra rum (eller möjligen fem)
Men om jag har med ytterligare parametrar så begränsas urvalet ytterligare, givetvis. Jag blir bara osäker, tänker jag åt rätt håll eller helt galet!?
Som det är nu räknas alla rum + hotel + company! Jag vill bara räkna rummen!
Jag sov på saken och kom på att jag skulle kunna skriva COUNT(.r.intID) i stället för stjärnan men det blir fortfarande 15...!!
Fasen, detta håller inte! :-)
Vad är det du vill göra egentligen?
Att det ska bli fyra eller fem istället för 15 är ingen fråga...
Vet du vad du får för resultat från din SELECT? Det kan ju vara praktiskt att se vad den räknar. Då kanske du kan lista ut själv vad det är som går galet.
SQL = "SELECT COUNT(*) " _
& ", (SELECT COUNT(*) FROM " _
& " [room] r, [hotel] h, [company] c WHERE " _
& " r.intCompanyID = c.intID AND h.intCompanyID = c.intID " _
& " AND r.bolView = TRUE AND h.bolView = TRUE AND c.bolView= TRUE " _
& ") FROM [roomBooking] rb WHERE rb.dteDate =" & dteMyDate & ";"
Har jag gjort något uppenbart fel!? När jag lägger till ett rum adderas räknaren med två hela tiden! 4,6, 8...!! Inte så sexigt...
Det betyder att SQL frågan räknar lie av varje. Jag vill bara räkna alla rummen!
Engine, ja... det är väl bara att backa och ta bort och se vad som blir dubbelt.
(Nu skriver vi om varandra!)
OK, jag tror jag har lokaliserat felet, eller problematiken.
Det är för många kopplingar helt enkelt.
[room] r
intID
intCompanyID
bolView
[hotel] h
intID
intCompanyID
bolView
[company] c
intID
bolView
***
Men det kan inte vara bara jag som kopplar på detta viset.
Hur skriver jag SQL frågan för att räkna antalet rum där:
r.bolView = TRUE AND h.bolView = TRUE AND c.bolView= TRUE
??
SELECT Count(*)
FROM room r
INNER JOIN (company c
INNER JOIN hotel h ON h.intCompanyID = c.intID)
ON c.intID = r.intCompanyID
WHERE r.bolView AND c.bolView AND h.bolView
Om det här blir det resultat du är ute efter vet jag inte, men jag förstår inte dina tabeller...
Rent logiskt så bör det finnas en koppling mellan room och hotel, så att man kan se typ hur många rum ett visst företag har bokat upp i ett visst hotell.
Som det är nu så är det företagen som har ett antal rum och det är väl förvisso naturligt, men långt ifrån logiskt med tanke på dina tabellnamn.
red. Möjligen så saknar du en tabell...
Jag kan förklara, när du skriver förstår jag att det blir konstigt!!
Ett företag, company, har en aller flera annex (i koden slarvigt tilldelat namnet 'hotel') som dom har rum i.
Detta är för att systemet ska passa ett företag som har tre rum så väl som stora hotel med 120 rum.
***
Det var inte meningen att korsposta...
Det blir 27... Det finns totalt 30 poster, så det var nästan alla!
Av dom 30 är 7 från tabellen [room].
Detta blir rätt antal, 7 rum.
SQL = "SELECT count(*) " _
& ", (SELECT COUNT(*) FROM " _
& " [room] r " _
& " INNER JOIN [company] c ON r.intCompanyID = c.intID " _
& ") FROM [roomBooking] rb WHERE rb.dteDate =" & dteMyDate & ";"
Men nu räknar du ju hur många rum ett företag har. Var det det som var meningen?
Tack Engine!! Äntligenär du med på noterna!! Ja, det är meningen!
Eller, ja.... nej, egentligen inte men på sätt och vis.
Jag har plockat bort de övriga 120 raderna kod.... Bara för att förenkla lite...
Hur som helst, det tillkommer kåd som;
... WHERE company.bolView = TRUE AND hotel.bolView = TRUE AND room.bolView = TRUE
sen är det massa med datum och öppettider och lite annat... drösa-mö-e, som smålänningen skulle säga!
Dagen har ängats åt annat. Men jag överväger starkt att överge mina fina idéer... för detta är superklurigt! Svårt att förklara, svårt att få fram rätt värdena.
Det känns inte så tryggt inflör framtiden att ha så här kopiöst mycket kod som jag inte fattar vad som gör vad...!! Helt klart är att fler application-variabler är att föredra, om inte annat så för dokumentationen!
Jaghar fått lite hjälp från annat håll idag.
Detta fungerar:
SQL = " SELECT Count(room.intID) as Antal " _
& " FROM (room INNER JOIN company ON room.intCompanyID = company.intID) "_
& " INNER JOIN hotel ON company.intID = hotel.intCompanyID "_
& " WHERE room.bolView=True AND company.bolView=True AND hotel.bolView=True "_
& " AND hotel.intLanguageID=1 ;"
Detta fungerar inte:
SQL = " SELECT Count(room.intID) as Antal " _
& " FROM (room INNER JOIN company ON room.intCompanyID = company.intID) "_
& " INNER JOIN hotel ON company.intID = hotel.intCompanyID "_
[b]& " OUTER JOIN roomCategoryDetail rcd ON room.intID = rcd.intRoomID " _[/b]
& " WHERE room.bolView=True AND company.bolView=True AND hotel.bolView=True "_
& " AND hotel.intLanguageID=1 ;"