oskarsMedlem sedan nov. 20051 317 inläggNärå! Det behöver du inte. Löser det nog genom att bara köra det lokalt istället! :) Du gör nog med frågan!
Har bara spånat igenom lite snabbt hittills... Ser bra ut tror jag? ... Ska be en annan ansvarig kolla igenom det också för att se så det stämmer, och så att jag inte missar något! Har du kollat något?
PPeter SMedlem sedan dec. 20025 483 inlägg Jag tror frågan skulle kunna göras både enklare och effektivare om i databasen startdatum och starttid slogs ihop till ett datumfält, och slutdatum och sluttid slogs ihop till ett datumfält.
[Edit]
Jag har kollat igenom några poster och tycker det ser rätt ut.
oskarsMedlem sedan nov. 20051 317 inläggokej... Förlåt att den är sån asså :( Jag ska försöka bygga om den efter att första arbetet av databasen är utfört med den nuvarande frågan.
Näeh nu måste jag sova. Jag har datum och tider på näthinna nu!
Bra jobbat iaf! Själv försöker jag komma på lösningar, och testar lite i koden, men du bräcker mig alltid :D
EDIT: aha, såg din EDIT nu :) Jo, jag börjar också komma till den insikten. Har kollat igenom några datum vid midnatt... Fan asså... Du är grym!
oskarsMedlem sedan nov. 20051 317 inlägghm... nä.... det funkar ibland och ibland inte... får inte rätsida på det...
Hajjar inte vart den röda tråden är...
Ska göra om formatet till det korrekta... vad tror du om det?
EDIT: När vi kontrollerat här så verkar det vara något med korta resor som inte får vara med... ibland....
EDIT: Det kan vara datafel i tabellen som orsakar felen...... Om man gör om frågan så den funkar med riktigt datumformat ... är den en bagatell då?
EDIT 20:15: Det verkar vara datafel eftersom felen inte är exakta varje gång. Dom är inte konstanta. Det blir till att slipa på datan istället! Om inte du hittar något! :stud
PPeter SMedlem sedan dec. 20025 483 inlägg Jag tror det blir mycket enklare om dagens fyra fält slås samman till totalt två fält i stället :)
oskarsMedlem sedan nov. 20051 317 inläggJo, jag med... har gjort det så nu... men har inte tid att jobba med det själv just nu. Jag återupptar mitt arbete vid typ 23:30 eller nått.. och arbetar vidare med det imorgon tidigt.. måste bli färdig tills på söndag
Jag kör fortfarande med gamla formatet, men det nya kommer se ut så här:
Slut: 2008-01-01 08:30:00
Start: 2008-01-01 08:30:00
Inte mkt mer än det.
Erbjudandet ligger fortfarande kvar, så du vet!
oskarsMedlem sedan nov. 20051 317 inlägg...men eftersom frågan fungerar helt korrekt på vissa tider... så måste det ju vara datan det är fel på?
Med andra ord = Frågan fungerar helt rätt!
? :)
PPeter SMedlem sedan dec. 20025 483 inlägg Om de nya datumena sparas i start resp. slut, skulle jag vilja skriva så här:
select dt.s, max(dt.c)
from
(
select a.start as s
, ( select count(*) + 1
from allingsas
where id <> a.id
and start > #2008-01-01 23:00:00#
and slut < #2008-01-02 01:00:00#
and ((start between a.start and a.slut) or (slut between a.start and a.slut)) ) as c
from allingsas a
where weekday(a.start) = 3
and a.start > #2008-01-01 23:00:00#
and a.slut < #2008-01-02 01:00:00#
) as dt
group
by dt.s
oskarsMedlem sedan nov. 20051 317 inläggFan va vacker den blev :)
Det jag fungerar på är hur fan du lyckas göra sökningen på ALLA poster på utvalt datum och tid. Som jag ser det så görs bara sökningar på 2st poster... Fast jag vet ju att du gjort rätt!
Btw, den gamla koden... Den returnerar ibland 0 och ibland inget datum alls... funderar lite på varför ...
Om jag vill ha "mindre eller lika med" så är det väl bara att göra så här?
Peter S skrev:
select dt.s, max(dt.c)
from
(
select a.start as s
, ( select count(*) + 1
from allingsas
where id <> a.id
and start >= #2008-01-01 23:00:00#
and slut <= #2008-01-02 01:00:00#
and ((start between a.start and a.slut) or (slut between a.start and a.slut)) ) as c
from allingsas a
where weekday(a.start) = 3
and a.start >= #2008-01-01 23:00:00#
and a.slut <= #2008-01-02 01:00:00#
) as dt
group
by dt.s
oskarsMedlem sedan nov. 20051 317 inläggFörsöker få ordning på den men i frågan vill den ju ha både TID och DATUM från forumläret.. jag kommer bara mata in TID från formuläret.. så ska den leta igenom alla datumen
EDIT: Ska det inte stå COUNT(*)+1 istället för COUNT(*) i senaste frågan som inte den frågan med datumformatet?
EDIT: Det krisar. Frågan funkar inte. Antar att det bästa är att gå över till frågan med det riktiga datumformatet.
oskarsMedlem sedan nov. 20051 317 inläggFörsöker mig på den nya frågan:
Veckodag = Request.Form("veckodag")
Starttid = "10:00:00"
Sluttid = "11:00:00"
select dt.s, max(dt.c)
from (
select a.new_Start as s, (
select count(*)+1
from allingsas
where id <> a.id
and new_Start > #"&Starttid&"#
and new_Slut < #"&Sluttid&"#
and ((new_Start between a.new_Start and a.new_Slut)
or (new_Slut between a.new_Start and a.new_Slut)) ) as c
from allingsas a
where Weekday(a.new_Start) = "&Veckodag&"
and a.new_Start > #"&Starttid&"#
and a.new_Slut < #"&Sluttid&"#) as dt
group by dt.s
Do Until RecSet.EOF
Response.Write("<tr style=""background-color:#"&Color&"""><td width=""100"">"&RecSet("s")&"</td><td width=""10"">;</td><td>"&RecSet("c")&"</td></tr>")
osv osv
Den returnerar dock ingenting ;)
Så här ser den ut, utskriven:
select dt.s, max(dt.c) from (select a.new_Start as s, ( select count(*)+1 from allingsas where id <> a.id and new_Start > #10:00:00# and new_Slut < #11:00:00# and ((new_Start between a.new_Start and a.new_Slut) or (new_Slut between a.new_Start and a.new_Slut)) ) as c from allingsas a where Weekday(a.new_Start) = 2 and a.new_Start > #10:00:00# and a.new_Slut < #11:00:00#) as dt group by dt.s
:)
PPeter SMedlem sedan dec. 20025 483 inlägg Hej Oskar,
Titta på mitt senaste förslag, där jämförs start resp. slut med kompletta datumtidsstämplar. I ditt senaste försök kan jag bara se att tiden är med.
oskarsMedlem sedan nov. 20051 317 inläggHej Peter!
Tack för att du lever!
Jag såg att du både använde datum + tid! Men jag matar ju inte in något datum från formuläret?
Ska jag göra en loop utanför denna frågan som loopar igenom varje Måndag och skriver in variabeln i SQL-frågan?
EDIT: Tror du... att det här kommer gå vägen?
PPeter SMedlem sedan dec. 20025 483 inlägg Ja, just det, tror du att du kan dela upp tiden på timmar och minuter? Så i stället för att mata in '13:24:00' så bryter du ut '13' och '24' och konverterar dem till tal:
select dt.s, max(dt.c)
from
(
select a.start as s
, ( select count(*) + 1
from allingsas
where id <> a.id
and ((hour(start) = 12 and minute(start) >= 0) or hour(start) > 12)
and (((hour(slut) = 13 and minute(slut) <= 0) or hour(slut) < 13) or (13 < 12 and hour(slut) > 12))
and ((start between a.start and a.slut) or (slut between a.start and a.slut)) ) as c
from allingsas a
where weekday(a.start) = 3
and ((hour(a.start) = 12 and minute(a.start) >= 0) or hour(a.start) > 12)
and (((hour(a.slut) = 13 and minute(a.slut) <= 0) or hour(a.slut) < 13) or (13 < 12 and hour(a.slut) > 12))
) as dt
group
by dt.s
Ovan skall hour(a.start) jämföras med timmen för starttiden, minute(a.start) med minuterna för starttiden, hour(a.slut) med timmen för sluttiden och minute(a.slut) med minuterna för sluttiden. :)
oskarsMedlem sedan nov. 20051 317 inläggDen säger ändå att [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.... Jag har angett alla kolumnnamn korrekt...
RecSet.Open "select dt.s, max(dt.c) from (select a.new_Start as s, ( select count(*) + 1 from allingsas where id <> a.id and ((hour(new_Start) = "&startHour&" and minute(new_Start) >= "&startMinute&") or hour(new_Start) > "&startHour&") and (((hour(new_Slut) = "&slutHour&" and minute(new_Slut) <= "&slutMinute&") or hour(new_Slut < "&slutHour&")) or ("&slutHour&" < "&startHour&" and hour(new_Slut) > "&startHour&")) and ((new_Start between a.new_Start and a.new_Slut) or (new_Slut between a.new_Start and a.new_Slut)) ) as c from allingsas a where weekday(a.new_Start) = "&Veckodag&" and ((hour(a.new_Start) = "&startHour&" and minute(s.new_Start) >= "&startMinute&") or hour(a.new_Start) > "&startHour&") and (((hour(a.new_Slut) = "&slutHour&" and minute(a.new_Slut) <= "&slutMinute&") or hour(a.new_Slut < "&slutHour&")) or ("&slutHour&" < "&startHour&" and hour(a.new_Slut) > "&startHour&"))) as dt group by dt.s", Connect, 3, 3
Det känns taskigt att returnera frågan så där fult utan radbrytningar när du spaltar upp den så fint från början... ska jag istället lägga in din fråga med samma radbrytningar med " & _ i koden istället kanske?
EDIT: Lite kod ovanför frågan:
startHour = CInt(Request.Form("startHour"))
startMinute = CInt(Request.Form("startMinute"))
slutHour = CInt(Request.Form("slutHour"))
slutMinute = CInt(Request.Form("slutMinute"))
Veckodag = Request.Form("veckodag")
PPeter SMedlem sedan dec. 20025 483 inlägg Ja, skriv hellre ut med radbrytningar :)
Hur ser frågan ut om du skriver ut den med response.write?
oskarsMedlem sedan nov. 20051 317 inlägg RecSet.Open "select dt.s, max(dt.c) " & _
"from (select a.new_Start as s, " & _
"( select count(*) + 1 " & _
"from allingsas where id <> a.id " & _
"and ((hour(new_Start) = "&startHour&" and minute(new_Start) >= "&startMinute&") or hour(new_Start) > "&startHour&") " & _
"and (((hour(new_Slut) = "&slutHour&" and minute(new_Slut) <= "&slutMinute&") or hour(new_Slut < "&slutHour&")) or ("&slutHour&" < "&startHour&" and hour(new_Slut) > "&startHour&")) " & _
"and ((new_Start between a.new_Start and a.new_Slut) or (new_Slut between a.new_Start and a.new_Slut)) ) as c " & _
"from allingsas a " & _
"where weekday(a.new_Start) = "&Veckodag&" " & _
"and ((hour(a.new_Start) = "&startHour&" and minute(s.new_Start) >= "&startMinute&") or hour(a.new_Start) > "&startHour&") " & _
"and (((hour(a.new_Slut) = "&slutHour&" and minute(a.new_Slut) <= "&slutMinute&") or hour(a.new_Slut < "&slutHour&")) or ("&slutHour&" < "&startHour&" and hour(a.new_Slut) > "&startHour&"))) " & _
"as dt group by dt.s", Connect, 3, 3
Utskriven:
select dt.s, max(dt.c) from (select a.new_Start as s, ( select count(*) + 1 from allingsas where id <> a.id and ((hour(new_Start) = 12 and minute(new_Start) >= 0) or hour(new_Start) > 12) and (((hour(new_Slut) = 13 and minute(new_Slut) <= 0) or hour(new_Slut < 13)) or (13 < 12 and hour(new_Slut) > 12)) and ((new_Start between a.new_Start and a.new_Slut) or (new_Slut between a.new_Start and a.new_Slut)) ) as c from allingsas a where weekday(a.new_Start) = 7 and ((hour(a.new_Start) = 12 and minute(s.new_Start) >= 0) or hour(a.new_Start) > 12) and (((hour(a.new_Slut) = 13 and minute(a.new_Slut) <= 0) or hour(a.new_Slut < 13)) or (13 < 12 and hour(a.new_Slut) > 12))) as dt group by dt.s
PPeter SMedlem sedan dec. 20025 483 inlägg Jag har redigerat min senaste kodpostning; det var ett felstavat alias som ställde till det :)
Dock returnerar inte frågan några resultat. Jag får felsöka det.
oskarsMedlem sedan nov. 20051 317 inläggAha... jag missade det där lilla S'et :)