[ASP-Sql] Sorteren, lege velden onderaan

Pagina: 1
Acties:

  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 04-09 12:53
Ik wil een database laten vertonen en nu wil ik dat waar een veld leeg is dat die onder aan de pagina wordt gezet, en de velden die wel tekst bevat dat deze alfabetisch wordt gesorteerd van a -> z -> lege velden!

Ik dacht deze code te gebruiken:
code:
1
SQL_STRING = "SELECT * FROM PersoneelGegevens ORDER BY Gebruikersnaam DESC"

Nu zet hij wel alle lege velden onderaan maar hij sorteerd van z naar a, en ik wil dat dus van a naar z. Hoe kan ik dit oplossen? Ik heb al ge-googled maar daar kon ik alleen vinden dat je DESC kon gebruiken om juist andersom te sorteren!

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:16
Quick and dirty oplossing:
Je kunt misschien 2 queries doen en deze dmv een UNION aan elkaar plakken.
Eerst selecteer je de niet lege velden, en die sorteer je. Daarna selecteer je de lege velden...

https://fgheysels.github.io/


  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 04-09 12:53
Op vrijdag 05 juli 2002 13:53 schreef whoami het volgende:
Quick and dirty oplossing:
Je kunt misschien 2 queries doen en deze dmv een UNION aan elkaar plakken.
Eerst selecteer je de niet lege velden, en die sorteer je. Daarna selecteer je de lege velden...
Zeg dat wel: "Quick and dirty oplossing", maar het is natuurlijk een idee, alleen nu is de vraag: Ik gebruik zo'n functie dat je alleen de eerste x records per pagina ziet, werkt dit dan ook nog :?

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


Verwijderd

uh ja.. dat lijkt me wel. Select TOP x .... en dat doe je dan met je 2e quey precies het zelfde

Verwijderd

De union oplossing is niet quick and dirty maar de enige goede.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:16
Op vrijdag 05 juli 2002 14:53 schreef Otis het volgende:
De union oplossing is niet quick and dirty maar de enige goede.
maar toch wel dirty. Al zeg ik het zelf.

https://fgheysels.github.io/


  • McMad
  • Registratie: Juli 2000
  • Laatst online: 18-08 11:26
De ORDER BY staat bij een union onderaan en slaat op de gehele set (oftwel ORDER BY wordt NA de UNION (en dan in dit geval natuurlijk UNION ALL)) uitgevoerd.
Je kunt beter een functie op de betreffende kolom loslaten in je ORDER BY.
Bijv. (ORacle)

<select>
ORDER BY
DECODE( veld, NULL, 1, 0 ) ASC

Als veld NULL is wordt de waarde 1, anders 0

He's mad, he's mad, he's madder then mad Jack McMad, winner of last years madman competition.


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:16
Op vrijdag 05 juli 2002 15:00 schreef McMad het volgende:
De ORDER BY staat bij een union onderaan en slaat op de gehele set (oftwel ORDER BY wordt NA de UNION (en dan in dit geval natuurlijk UNION ALL)) uitgevoerd.
Je kunt beter een functie op de betreffende kolom loslaten in je ORDER BY.
Bijv. (ORacle)

select
ORDER BY
DECODE( veld, NULL, 1, 0 ) ASC

Als veld NULL is wordt de waarde 1, anders 0
Da's ook een oplossing maar uw DBMS moet dan wel zo'n functie hebben.
Trouwens, als je je query zo schrijft:
code:
1
2
3
4
5
6
7
8
9
10
11
(
SELECT kolom
FROM tabel
ORDER BY kolom
)
UNION
(
SELECT kolom
FROM tabel2
ORDER BY tabel2
)

slaat die order by toch niet op de gehele resultset.

Trouwens, als je DBMS zo geen functie heeft, en die ORDER BY dan toch op de gehele resultset slaat van een UNION kan je het ook zo doen:
code:
1
2
3
4
5
6
7
8
SELECT 0, naam
FROM tabel
WHERE veld is not null
UNION
SELECT 1, naam
FROM tabel
WHERE veld is NULL
ORDER BY 1, naam

https://fgheysels.github.io/


  • McMad
  • Registratie: Juli 2000
  • Laatst online: 18-08 11:26
Op vrijdag 05 juli 2002 15:08 schreef whoami oa het volgende:
code:
1
UNION
Oracle (7.3) kan in ieder geval alleen maar sorteren over de complete union. Overigens zou ik in jou voorbeeld liever een UNION ALL gebruiken.

He's mad, he's mad, he's madder then mad Jack McMad, winner of last years madman competition.


  • Polderdijk
  • Registratie: December 2001
  • Laatst online: 04-09 12:53
Op vrijdag 05 juli 2002 15:08 schreef whoami het volgende:

[..]

Da's ook een oplossing maar uw DBMS moet dan wel zo'n functie hebben.
Trouwens, als je je query zo schrijft:
code:
1
2
3
4
5
6
7
8
9
10
11
(
SELECT kolom
FROM tabel
ORDER BY kolom
)
UNION
(
SELECT kolom
FROM tabel2
ORDER BY tabel2
)

slaat die order by toch niet op de gehele resultset.

Trouwens, als je DBMS zo geen functie heeft, en die ORDER BY dan toch op de gehele resultset slaat van een UNION kan je het ook zo doen:
code:
1
2
3
4
5
6
7
8
SELECT 0, naam
FROM tabel
WHERE veld is not null
UNION
SELECT 1, naam
FROM tabel
WHERE veld is NULL
ORDER BY 1, naam
Ik grbruik nu
code:
1
SQL_STRING = "SELECT 0 FROM PersoneelGegevens WHERE Gebruikersnaam <> '' UNION SELECT 1 FROM PersoneelGegevens WHERE Gebruikersnaam = ''"

Dit is ook niet goed, hij opent wel de database maar als ik met RS("xxx") iets uit de database wil lezen dan geeft hij de volgende melding:
code:
1
Kan het item niet vinden in de collectie die overeenkomt met de gewenste naam of het gewenste nummer.

Maar de naam is zeker weten goed, want als ik de SQL_STRING vervangt door:
code:
1
SQL_STRING = "SELECT * FROM PersoneelGegevens ORDER BY Gebruikersnaam"

Dan geeft hij wel alles netjes!

Webhosting van SkyHost.nl: 25 Mb / 1 Gb windows hosting € 4,50 p/m excl.btw!


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:16
Op vrijdag 05 juli 2002 15:32 schreef Polderdijk het volgende:

Ik grbruik nu
code:
1
SQL_STRING = "SELECT 0 FROM PersoneelGegevens WHERE Gebruikersnaam <> '' UNION SELECT 1 FROM PersoneelGegevens WHERE Gebruikersnaam = ''"

Dit is ook niet goed, hij opent wel de database maar als ik met RS("xxx") iets uit de database wil lezen dan geeft hij de volgende melding:
code:
1
Kan het item niet vinden in de collectie die overeenkomt met de gewenste naam of het gewenste nummer.

Maar de naam is zeker weten goed, want als ik de SQL_STRING vervangt door:
code:
1
SQL_STRING = "SELECT * FROM PersoneelGegevens ORDER BY Gebruikersnaam"

Dan geeft hij wel alles netjes!
Tuurlijk, hij kan het item (de kolomnaam) niet vinden, omdat je hem niet selecteert.
Je selecteert gewoon een 0 en een 1.
Dus, de output van je query ziet er bv zo uit:
code:
1
2
3
4
5
6
7
0
0
0
1
1
1
1

Je moet dus ook nog de kolommen die je nodig hebt selecteren, die 0 en die 1 worden enkel gebruikt voor de sortering
code:
1
ORDER BY 1

sorteert op het eerste veld.

(Misschien even een SQL tutorial/boek te hand nemen?)

https://fgheysels.github.io/


  • raptorix
  • Registratie: Februari 2000
  • Laatst online: 17-02-2022
Je zou zoiets als dit kunnen doen

select username as veld1 , isnull(username,'1') as veld 2 from users order by veld2,veld1

Zoiets werkt volgens mij wel.
Pagina: 1