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!
25 svar · 545 visningar · startad av k0ffe
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? :)
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!
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
Förklara vad då? Jag ser inget konstigt.
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.
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?
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 ... "
:) Ok.
Men det blir fortfarande inte rätt?
Nu hämtar den bara de tre senaste ur nyheter_e-tabellen.
Jag läste om ditt första inlägg och förstår nu vad du vill. Vilken databashanterare använder du?
Access? OLEDB?
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.
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? :)
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.
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!
Hur fungerar frågorna om du använder dem var för sig?
Hur menar du då? Exempel?
Jag menar varje delfråga som ingår i unionen.
Hur ska jag dela upp dem?