k0ffeMedlem sedan maj 2003389 inlägg
Tjena, har lite probs.
Jag har denna SQL-fråga för att sortera senaste tre nyheterna, ur tre olika tabeller.
sql = " select * from nyheter_e order by Datum desc " &_
"union select * from nyheter_b order by Datum desc " &_
"union select * from nyheter_u order by Datum desc "
Men då sorterar den oavsett tabell efter senaste datum.
T.ex.
Undomsnyhet - 2004-11
Elitnyhet - 2004-10
Ungdomsnyhet - 2004-9
Om jag vill ha den senaste ur varje tabell, och sortera endast dem efter datum, hur ska sql:en vara då?
T.ex.
Ungdomsnyhet - 2004-11
Elitnyhet - 2004-10
Div3nyhet - 2004-7 istället för Ungdomsnyhet 2004-09.
Hänger ni med? :)
J.N.Medlem sedan apr. 20031 660 inlägg
HEJ!
Hur blir det om du använder TOP 1 istället för *? Då bör du få en av varje, nu får du alla nyheter.
Denna tråd känns felpostad!
LarsGMedlem sedan dec. 200012 465 inlägg
select n.*,1 as q
from nyheter_e as n
union all
select n.*,2
from nyheter_b as n
union all
select n.*,3
from nyheter_u as n
order by q,Datum desc
flyttas från ASP
k0ffeMedlem sedan maj 2003389 inlägg
J.N. -> det funkade inte, tänkte så jag med :)
Ok, LarsG vill du förklara koden lite?
LarsGMedlem sedan dec. 200012 465 inlägg
Förklara vad då? Jag ser inget konstigt.
k0ffeMedlem sedan maj 2003389 inlägg
LarsGMedlem sedan dec. 200012 465 inlägg
n.* hämtar alla kolumner från tabellen n
Du kan lägga till godtyckliga uttryck i en select-lista och namnge dessa (med q t.ex). Namnet kan man använda i order by.
Detta värde används för att markera vilken tabell de olika posterna kommer ifrån. När man anger detta värde i order by så kommer dbms att sortera alla poster med värdet 1 i kolumnen q först därefter de med värdet 2 osv. Inom varje sådan grupp sorteras sedan posterna med avseende på datum i fallande ordning.
k0ffeMedlem sedan maj 2003389 inlägg
Okay, tror jag hajjar. Men jag får felmeddelande?
Microsoft VBScript compilation error '800a0409'
Unterminated string constant
/meny.asp, line 109
sql = " select n.*,1 as q
-------------------------^
Nån aning om varför?
LarsGMedlem sedan dec. 200012 465 inlägg
Om du vill skriva en sträng över flera rader i VB-skript så måste du göra
SQL = "select n.*,1 as q " & _
"from ... "
k0ffeMedlem sedan maj 2003389 inlägg
:) Ok.
Men det blir fortfarande inte rätt?
Nu hämtar den bara de tre senaste ur nyheter_e-tabellen.
LarsGMedlem sedan dec. 200012 465 inlägg
Jag läste om ditt första inlägg och förstår nu vad du vill. Vilken databashanterare använder du?
k0ffeMedlem sedan maj 2003389 inlägg
LarsGMedlem sedan dec. 200012 465 inlägg
Ok, JET alltså.
sql = " select top 1 * from nyheter_e order by Datum desc " &_
"union select top 1 * from nyheter_b order by Datum desc " &_
"union select top 1 * from nyheter_u order by Datum desc "
dvs, du skulle ha litat på J.N. från början.
k0ffeMedlem sedan maj 2003389 inlägg
jag har gjort så! It wont work... den tar den senaste ur nyheter_e, men från nyheter_u och _b tar den ut två från 2003-08-12? :)
LarsGMedlem sedan dec. 200012 465 inlägg
Det är så top fungerar i Jet SQL. Om det finns flera med samma datum som det högsta så får du med dom också. Du får lägga till fler kolumner i order by så att det sorterar på blir unikt.
k0ffeMedlem sedan maj 2003389 inlägg
Ok, men dom andra två är inte dom nyaste! Dom är gamla...
Hur menar du? Behöver verkligen få det här att fungera, blir galen!
LarsGMedlem sedan dec. 200012 465 inlägg
Hur fungerar frågorna om du använder dem var för sig?
k0ffeMedlem sedan maj 2003389 inlägg
Hur menar du då? Exempel?
LarsGMedlem sedan dec. 200012 465 inlägg
Jag menar varje delfråga som ingår i unionen.
k0ffeMedlem sedan maj 2003389 inlägg
Hur ska jag dela upp dem?