Ik heb een tabel met artiesten. Iedere artiest heeft een "pos" waarde (positie)

Dus met 10 artiesten zijn er dus ook 10 posities.

Nu kan het dus zijn dat artiest 8, positie 1 heeft en artiest 4 positie 2.

Hoe krijg ik het met 1 query voor elkaar dat eerst de artiesten weergegeven worden (in een while loop) die pos=1 en pos=2 hebben, en daarna pas de rest ?

Ik gebruik nu hier 2 queries voor, maar weet zeker dat dit met 1 kan. Echter kom ik er dus niet uit.

[edit]
De queries zijn nu dus (in jip en janneke snel-formaat):

1. SELECT FROM artiesten WHERE pos < 3
2. SELECT FROM artiesten WHERE pos > 2

[size=xsmall]Toevoeging op 06/07/2012 13:43:57:[/size]

Volgens mij moet ik ORDER BY CASE gebruiken... am i right ?

SELECT FROM artiesten ORDER BY CASE WHEN pos < 3 THEN pos ELSE 3 END, pos ASC
Kan je niet gewoon ORDER BY positie ASC of DESC doen?


SELECT
	artiest,
	titel,
	positie,
FROM
	artiesten
ORDER BY
	positie
DESC // Of ASC gebruiken


Uitkomst:
positie 1. Artiest - titel
positie 2. Artiest - titel
positie 3. Artiest - titel
positie 4. Artiest - titel
ENZ........
Probeer eens met zo'n soort constructie (ik verzin een aantal velden)


SELECT id, username, (pos=1 OR pos=2) AS foo FROM artiesten
ORDER BY foo, datum


Nee, want de rest gaat op invoerdatum. Eerste 2 zijn zeg maar: "uitgelicht".

Hier even de query zoals hij is/was voor toevoeging van het weergeven van de 2 entries met pos=1 & pos=2:

SELECT id,naam,genre,label,content,date_online FROM artiesten WHERE date_online < NOW() AND booking=1 AND aktief=1 ORDER BY date_online ASC


[edit]
De uiteindelijke JUISTE query. Haalt eerst entries met pos=1 èn pos=2 uit de database, daarna de overige entries. Die zijn weer op hun beurt gesorteerd op datum.

SELECT id,naam,genre,label,content,date_online,pos FROM artiesten WHERE date_online < NOW() AND distributie=1 AND aktief=1 ORDER BY CASE WHEN pos < 3 THEN pos ELSE 3 END, date_online DESC

Reageren