Toon posts:

[MySQL] Order by - Null records

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een query waarin ik een order by doe op de bedrijfsnaam cel.
De bedrijfsnaam is geen verplicht veld en is dus veelal leeg. Als ik nu neerzet:
order by bedrijfsnaam ASC
dan sorteerd hij goed, maar de lege (en dus niets betekenende ) records komen bovenaan.
Use a database-specific option on the ORDER BY clause (e.g. for Oracle it'd be
ORDER BY nullable_field NULLS LAST) - depends on your database's extensions.
Bestaat er een dergelijke constructie voor MySQL?
quote: offtopic
leuk weer de forums in een nieuw jasje :)

[ Voor 6% gewijzigd door Verwijderd op 20-01-2004 13:26 ]


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

code:
1
order by ifnull(bedrijfsnaam, 'zzzzzz')

Wellicht niet precies, maar aan zoiets kun je denken.

Who is John Galt?


  • TeasingU
  • Registratie: Juni 2001
  • Laatst online: 15-09-2022

TeasingU

I Live Longer

Heb het even in acces geprobeert en alleen DESC werkt wel op zo'n manier dat Null waarden onderaan komen te staan.

Maar bedrijfsnaam lijkt me niet een sleutel-tabel, is er misschien niet een mogelijkheid dat je van een andere kolom de waarden sorteerd en dan die van bedrijfsnaam?

* Sorry niet goed gelezen.

[ Voor 7% gewijzigd door TeasingU op 20-01-2004 13:35 ]

cd /usr/ports/www/porn make install


Verwijderd

Topicstarter
ah sh*t!
ik insert/update de records met een empty string.... de records zijn dus geen NULL maar "" :'(

De IFNULL doet dus helaas helemaal niets, het had wel een zeer goede optie geweest.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Dan is er vast nog wel zoiets als IIF.

Who is John Galt?


Verwijderd

dan insert/update je toch met NULL?? kwestie van je query aanpassen, desnoods een extra if'je om te checken of de bedrijfsnaam is ingevuld of niet en aan de hand daarvan je query samenstellen!

Verwijderd

Topicstarter
FoxxFury
tja.. dat ligt aan de omvang van de site waar je mee bezig bent en de plaatsen waar velden ingevoerd kunnen worden.
Deze site heeft een front en backend en ik denk dat er zo'n 20 pagina's zijn die gebruik maken van de gegevens, het even aanpassen is er helaas niet bij

Verwijderd

misschien had je dan vantevoren wat meer moeten normaliseren, ik probeer altijd al mijn regels code slechts 1 keer te typen en dan te hergebruiken.... aanpassen is dan altijd ongeacht de omvang een piece of cookie! Bovendien met elke 'search & replace' (denk aan notepad) kun je zo'n aanpassing alsnog snel uitvoeren!

[ Voor 6% gewijzigd door Verwijderd op 20-01-2004 13:52 ]


  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 14-01 22:23

_Sunnyboy_

Mooooooooooooooooo!

Als je "" ipv NULL invult zou je dit kunnen proberen

code:
1
order by if(bedrijfsnaam!='',bedrijfsnaam, 'zzzzzz')

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


Verwijderd

Topicstarter
IF( p.prospect_bedrijfsnaam = '', 'ZZZZ', p.prospect_bedrijfsnaam ) as bedrijfsnaam
does the trick!
thnx!!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 26-05 00:01

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op 20 januari 2004 @ 14:10:
[...]

does the trick!
thnx!!
Wat nu waneer er in het onwaarschijnlijke geval TOCH een bedrijf komt dat zzzzzzzzzzzzzmedia heet?

En dat terwijl er een veel nettere oplossing mogenlijk is.
Wat dacht je van:

IF( p.prospect_bedrijfsnaam = '', false, true ) as hasBedrijfsnaam

en dan in de
order by hasBedrijfsnaam, prospect_bedrijfsnaam

Zelfde resultaat, nettere implementatie

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Sosabowski
  • Registratie: Juni 2003
  • Laatst online: 18-04 11:49

Sosabowski

nerd

code:
1
2
3
4
SELECT * 
FROM tabel 
WHERE (bedrijfsnaam <> '') AND (bedrijfsnaam <> NULL)
ORDER BY bedrijfsnaam ASC


Dat werkt prima, maar je verteld ons niet wat de rest van je query is dus of je dit er in kan stoppen weet ik niet.

The whole problem with the world is that fools and fanatics are always so certain of themselves, and wiser people so full of doubts. -- Bertrand Russell


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

IorGie schreef op 20 januari 2004 @ 16:46:
code:
1
2
3
4
SELECT * 
FROM tabel 
WHERE (bedrijfsnaam <> '') AND (bedrijfsnaam <> NULL)
ORDER BY bedrijfsnaam ASC


Dat werkt prima, maar je verteld ons niet wat de rest van je query is dus of je dit er in kan stoppen weet ik niet.
Dit werkt niet prima, NULL is namelijk ook ongelijk aan NULL :)

Daarvoor moet je een ISNULL-functie gebruiken.

Professionele website nodig?


  • Sosabowski
  • Registratie: Juni 2003
  • Laatst online: 18-04 11:49

Sosabowski

nerd

Verwijderd schreef op 20 januari 2004 @ 13:38:
ah sh*t!
ik insert/update de records met een empty string.... de records zijn dus geen NULL maar "" :'(

De IFNULL doet dus helaas helemaal niets, het had wel een zeer goede optie geweest.
Ok, dan laatje de laaste voorwaarde in mijn voorbeeldje weg. :)

The whole problem with the world is that fools and fanatics are always so certain of themselves, and wiser people so full of doubts. -- Bertrand Russell

Pagina: 1