webForumDet fria alternativet

Sql-sats

25 svar · 545 visningar · startad av k0ffe

k0ffeMedlem sedan maj 2003389 inlägg
#1

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
#2

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
#3
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
#4

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
#5

Förklara vad då? Jag ser inget konstigt.

k0ffeMedlem sedan maj 2003389 inlägg
#6

select n.*,1 as q

?

LarsGMedlem sedan dec. 200012 465 inlägg
#7

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
#8

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
#9

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
#10

:) 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
#11

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
#12

Access? OLEDB?

LarsGMedlem sedan dec. 200012 465 inlägg
#13

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
#14

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
#15

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
#16

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
#17

Hur fungerar frågorna om du använder dem var för sig?

k0ffeMedlem sedan maj 2003389 inlägg
#18

Hur menar du då? Exempel?

LarsGMedlem sedan dec. 200012 465 inlägg
#19

Jag menar varje delfråga som ingår i unionen.

k0ffeMedlem sedan maj 2003389 inlägg
#20

Hur ska jag dela upp dem?

Genererad på 389 ms · cache AV · v20260730165559-full.f96bc7eb