webForumDet fria alternativet
Logga in / Bli medlem

If i Order by

Databaser & SQL

3 svar · 177 visningar · startad av Vide

Medlem sedan dec. 19998 577 inlägg
Trådstart#1

Har ett nyhetssystem där man kan välja att göra en nyhet mer viktig och därmed läggs den överst (Order By). Nu är det så att man kan välja ett slutdatum där den skall sluta vara viktig (sticky).

Om tiden gått ut (Date > StickyDate) skall orderby-satsen ändras, kan m.h.a en IF-sats göra detta?

Kör SQL-server.

SELECT TOP 10 News.id AS ID, News.UID AS UID, News.Date, 
News.Subject, News.Message, News.StickyDate, News.Sticky, 
Members.UserName , Members.Email
FROM News LEFT OUTER JOIN
Members ON News.UID = Members.id ORDER BY Sticky Desc, Date Desc

Mvh, Vide

Medlem sedan dec. 20003 887 inlägg
#2

IF...ELSE, känns som en skum lösning ;)

Varför inte använda en variabel, som du sätter innan? Blir förvisso en select till, men det gör nog ingen skillnad... eller såhär:

ORDER BY IIf((StickyDate > Date), "blabla DESC", "blabla ASC")

Kanske?

Medlem sedan dec. 200012 464 inlägg
#3

case är lösningen på alla problem

SELECT TOP 10 News.id AS ID, News.UID AS UID, News.Date, 
News.Subject, News.Message, News.StickyDate, News.Sticky, 
Members.UserName , Members.Email
FROM News LEFT OUTER JOIN
Members ON News.UID = Members.id 
ORDER BY case when sticky <> 0 and
stickyDate < getdate() then sticky else 0 end desc,
 Date Desc
Medlem sedan dec. 19998 577 inlägg
#4

Tnx, funkar finfint... :D

258 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)