VideMedlem sedan dec. 19996 094 inlägg
Tjenare!
/me och joinar är hopplösa... ;)
Har ett forum där jag skall lista inläggen efter de som har senaste svar (och utan svar), men jag får inte till själva joinen.
posts:
Id
HostId (0 om inlägget själv är 'host')
DateTime
Kan någon lära mig en gång för alla... :e
------------------
Mostly Harmless
LarsGMedlem sedan dec. 200012 465 inlägg
select f.*,coalesce((select max(datetime) from forum where hostid = f.id),datetime) as maxdate
from forum as f
where hostid = 0
order by maxdate desc
------------------
essentitia preter non sans multiplicandum
VideMedlem sedan dec. 19996 094 inlägg
Hmm... skulle kanske nämnt att jag tyvärr använder Access.
Får att felmeddelande när jag exekverar den, men inget SQL-fel, utan ett ASP-fel.
Vad gör coalesce?
------------------
Mostly Harmless
LarsGMedlem sedan dec. 200012 465 inlägg
coalesce(a,b) <==> case when a is null then b end <==> iif(a is null,b,a)
Du kanske kan byta ut coalesce mot iif men jag är tveksam om Access tillåter select inuti en iif. Sen så kommer Access att skrika om
order by maxdate
du får göra
order by 4
dvs den 4:e kolumnen i select-listan.
Men som sagt, så tror jag inte på denna lösning i Access,. Jag funderar lite.
------------------
essentitia preter non sans multiplicandum
@ndersMedlem sedan juni 200026 914 inlägg
Du har inte i asp-koden skrivit exakt som LarsG skrev? ;)
Skämt åsido, vad får du för asp-fel då?
Mvh,
------------------
Har du sett Bires lilla häst?
VideMedlem sedan dec. 19996 094 inlägg
LarsG, oki... Så iif funkar i Access? Trevligt... :)
@nders, hehe... nä så borta är jag inte... :e
Felet är det mycket spännande: Unspecified error
------------------
Mostly Harmless
@ndersMedlem sedan juni 200026 914 inlägg
På vilken rad? på .open eller på execute?
Hur ser koden ut?
I övrigt så tror jag att LarsGs iif-variant bör fungera.
Mvh,
------------------
Har du sett Bires lilla häst?
VideMedlem sedan dec. 19996 094 inlägg
på ".execute"...
Inte mycket på den raden... ;)
Set m_objRS = m_objConn.Execute(m_strSQL)
------------------
Mostly Harmless
[Redigerat av Vide den 18 dec 2001]
LarsGMedlem sedan dec. 200012 465 inlägg
Det låter inte så upplyftande. Kan du köra sql-satsen direkt i Access?
------------------
essentitia preter non sans multiplicandum
spangoMedlem sedan juni 20006 147 inlägg
snafu.
[Redigerat av spango den 18 dec 2001]
VideMedlem sedan dec. 19996 094 inlägg
LarsG, nej... den säger: "undefined function 'coalesce' in expression"
------------------
Mostly Harmless
@ndersMedlem sedan juni 200026 914 inlägg
Med iif-varianten.
------------------
Har du sett Bires lilla häst?
VideMedlem sedan dec. 19996 094 inlägg
iif:
select f.*,iif((select max([datetime]) from posts where hostid = f.id),[datetime]) as [maxdate] from posts as f where hostid = 0 order by [maxdate] desc
I ASP säger den:
No value given for one or more required parameters.
När jag kör den i Access så frågar den först efter ett parametervärde för maxdate, och när man inte anger något, så funkar det fint...
------------------
Mostly Harmless
LarsGMedlem sedan dec. 200012 465 inlägg
Du får byta ut
order by maxdate
mot
order by n
där n är ordningstalet för maxdate i select-listan
------------------
essentitia preter non sans multiplicandum
VideMedlem sedan dec. 19996 094 inlägg
Okej, nu visar den iaf posterna, men det visar fler än vad som finns (med hostid = 0), och inte i rätt ordning.
select f.Id, f.subject, f.userid, f.datetime, iif((select max([datetime]) from posts where hostid = f.id),[datetime]) as maxdate from posts as f where hostid = 0 order by 5 desc
------------------
Mostly Harmless
LarsGMedlem sedan dec. 200012 465 inlägg
Att den visar för många poster förstår jag inte varför.
Ordningen däremot
select f.Id, f.subject, f.userid, f.datetime, iif((select max([datetime]) from posts where hostid = f.id) is null,[datetime],(select max([datetime]) from posts where hostid = f.id)) as maxdate from posts as f where hostid = 0 order by 5 desc
------------------
essentitia preter non sans multiplicandum
VideMedlem sedan dec. 19996 094 inlägg
Argh...
Att den hämtade flera poster var bara ett slarvfel, dock är ordningen fortfarande lite konstig, skall kolla lite närmare på hur den sorterar nu och se om jag hittar något...
------------------
Mostly Harmless
VideMedlem sedan dec. 19996 094 inlägg
Nä ni, hittar inget... men det måste ligga i iif-satsen. Det verkar som om den sorterar efter "f.datetime", men den har jag ju inte angivit som order by fält... :q
------------------
Mostly Harmless
LarsGMedlem sedan dec. 200012 465 inlägg
select f.Id, f.subject, f.userid, f.datetime, iif((select max([datetime]) from posts where hostid = f.id) is null,[b]f.[/b]datetime,(select max([datetime]) from posts where hostid = f.id)) as maxdate from posts as f where hostid = 0 order by 5 desc
------------------
essentitia preter non sans multiplicandum
VideMedlem sedan dec. 19996 094 inlägg
Nope... samma som förut...
Såhär ser det ut nu:
select f.Id, f.subject, f.userid, f.datetime, f.forumid = 1, iif((select max([datetime]) from posts where hostid = f.id and f.forumid = 1) is null,f.datetime,(select max([datetime]) from posts where hostid = f.id and f.forumid = 1)) as maxdate from posts as f where hostid = 0 and f.forumid = 1 order by 6 desc
Detta borde ju inte vara ett så ovanligt problem att man vill sortera efter senaste inlägget, varför är det så svårt för... :q ;)
------------------
Mostly Harmless