Toon posts:

[SQL]Lege velden onderaan in sortering

Pagina: 1
Acties:

Verwijderd

Topicstarter
Volgende SQL query geeft mij de laatste 5 nieuwsberchten, gesorteerd op een zelf in te geven, niet verplichte volgorde.

select top 5 id, news_title from news where news_online = 1 order by news_order asc

Als bij een bericht de volgorde niet wordt ingegeven echter komt dit eerst in de lijst omdat dit als 0 gezien wordt.
Hoe kan ik de query aanpassen zodat dit niet meer het geval is?

  • rickmans
  • Registratie: Juli 2001
  • Niet online

rickmans

twittert

Ik vermoed dat je dan je WHERE clausule iets moet uitbreiden, maar voor de rest snap ik weinig van wat je eigenlijk wilt :)

Don't mind Rick


  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:44

momania

iPhone 30! Bam!

Verwijderd schreef op 07 september 2002 @ 16:22:
Als bij een bericht de volgorde niet wordt ingegeven echter komt dit eerst in de lijst omdat dit als 0 gezien wordt.
:?
Leg uit...plak je de ORDER BY er dynamisch achter of doe/bedoel je iets
anders?

Neem je whisky mee, is het te weinig... *zucht*


  • dvdhoek
  • Registratie: Februari 2002
  • Laatst online: 30-08 22:07
Ik zou ervoor zorgen dat het veld ALTIJD gevuld is. Ik neem aan dat een applicatie deze tabel vult. Als niets ingevuld wordt, dan laat je de applicatie bijvoorbeeld 99999 naar de tabel schrijven.
Als je dit echt niet wilt, kun je met een UNION werken. Beetje afhankelijk van de syntax van je DBMS wordt dit:

select top 5 id, news_title from news where news_online = 1 and news order IS NOT NULL order by news_order asc
UNION
select top 5 id, news_title from news where news order IS NULL

Indien je ook nog een timestamp ofzo bijhoudt, is het wellicht een idee om het zo te doen:

select top 5 id, news_title from news where news_online = 1 and news_order IS NOT NULL order by news_order asc
UNION
select top 5 id, news_title from news where news_order IS NULL order by descending date_variabele

[ Voor 0% gewijzigd door dvdhoek op 07-09-2002 17:51 . Reden: tikfoutjes ]


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 17-08 22:44
Waar hij dus tegen aan liep was dat een NULL in zijn database standaard naar een 0 gecast wordt. Althans dat is wat ik er van begrijp.

En is dat top standaard SQL? (Heb hem zelf nog nooit gebruikt...)

  • dvdhoek
  • Registratie: Februari 2002
  • Laatst online: 30-08 22:07
The - DDD schreef op 07 september 2002 @ 20:12:
Waar hij dus tegen aan liep was dat een NULL in zijn database standaard naar een 0 gecast wordt. Althans dat is wat ik er van begrijp.

En is dat top standaard SQL? (Heb hem zelf nog nooit gebruikt...)
Ik denk niet dat NULL naar 0 wordt gecast maar dat simpelweg in een order by NULL values vooraan komen, vandaar dat ik de UNION query als oplossing heb beschreven. Ik denk dat als er ook 0 waarden voorkomen, de NULLs alsnog eerst zullen komen.

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Leg eens duidelijk uit wat je bedoeld.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Je gebruikt het TOP keyword, dus de kans is groot dat je MSSQL gebruikt. Vandaar een oplossing in T-SQL:

code:
1
2
3
4
5
6
7
8
9
10
select  top 5
    dummy = case (news_order)
            when 0 THEN 99999
            else news_order
        end,
    id,
    news_title
from news
where news_online = 1
order by 1 asc

Je voegt hier een dummy kolom toe, waar je vervolgens op sorteert.

Never underestimate the power of

Pagina: 1