[mysql] sorteren op enum veld

Pagina: 1
Acties:

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Stel ik heb een tabel met daarin 3 soorten blokken (ENUM field), namelijk: BOVENKANT, MIDDEN, ONDERKANT

Nu wil ik dmv een query de blokken gesorteerd op ENUM field eruit halen.

BOVEN moet bovenaan komen, erna MIDDEN en erna ONDER.

Dit is niet zo moeilijk om te realiseren, ik kan dan gewoon sorteren op het ENUM field. De moeilijkheid zit hem erin dat ik alleen de laatste 10 van MIDDEN wil tonen en alles van BOVEN en ONDER.

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
2 querys gebruiken is denk ik het makkelijkste : haal eerst boven en onder op. Daarna de laatste 10 van midden.

Btw wat bedoel je met bovenaan / onderaan. Plaatsing is volgens mij makkelijker met css te doen dan met dbasevolgordes...

Of je kan het heel ingewikkeld gaan maken met subquery's etc. Maar ik denk dat het het makkelijkste is met 2 query's.

Verwijderd

In MSSQL zou ik daar een UNION voor gebruiken.

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Nou ik wil 1 query gebruiken, om alles in 1 x eruit te halen. Het is namelijk allemaal hetzelfde wat erin staat, maar aan de hand van het ENUM veld wil ik de positie bepalen.

BOVEN bedoel ik eigenlijk de header mee en ONDER de footer.

MIDDEN moet dynamisch zijn.Nu kan ik wel 3 queries gebruiken, maar dat is hem ook niet denk ik.

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 10:34

Dido

heforshe

Toch is een union van die drie queries wel een overzichtelijke oplossing. Technisch levert je dat trouwens precies 1 query op :)

Wat betekent mijn avatar?


  • Pyrus
  • Registratie: November 2001
  • Laatst online: 00:10

Pyrus

Hardknock life

Er van uitgaande dat je dingen ook een id heb zou je iets als dit kunnen proberen:
SQL:
1
2
3
4
5
6
7
8
9
10
11
SELECT 
  foo,
  bar
FROM
   tabel
WHERE
  id IN (SELECT id FROM tabel WHERE enumveld="midden" ORDER BY enumveld LIMIT 0, 10)
    OR
  enumveld = "boven" 
    OR
  enumveld = "onder"


Of je gebruikt een fatsoenlijk datamodel en zorgt dat je alleen gelijke gegevens in het zelfde veld staan ;) (Je footer is niet je header en je al helemaal niet je content veld) Of je zorgt er voor dat je header en footer hardcoded zijn, want die zullen als het goed is niet vaak veranderen.

Edit:
oh moet je wel een SQL server DBMS hebben die subqueries ondersteunt, maar dat kunnen we niet ruiken als je dat er niet bij vermeldt ;)

offtopic:
@hieronder: d'oh! bedoelde natuurlijk een DBMS |:(

[ Voor 15% gewijzigd door Pyrus op 21-01-2007 22:45 ]

LinkedIn


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
SQL server hebben die subqueries ondersteunt
SQL Server ondersteunt al eeuwen ondersteunt al eeuwen subqueries; maar het gaat hier om MySQL.
Maar ik zou ook voor de union gaan; en om er t.a.t zeker van te zijn dat je alles altijd in de juiste volgorde terugrkijgt, doe je dan dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
select 1, blaat
from tabel
where miep = 'boven'
union
select 2, blat
from tabel
where miep = 'midden'
union
select 3, blaat
from tabel
where miep = 'onder'
order by 1

https://fgheysels.github.io/


Verwijderd

Geen idee hoe enum velden in MySQL werken, maar iets dergelijks moet je toch op het goede spoor zetten?
SQL:
1
2
3
4
5
SELECT <velden> FROM tabel WHERE enum_veld = 'BOVEN'
UNION
SELECT <velden> FROM tabel WHERE enum_veld = 'MIDDEN' ORDER BY <keyveld> DESC LIMIT 10
UNION
SELECT <velden> FROM tabel WHERE enum_veld = 'ONDER'

Er kunnen syntax fouten in zitten, omdat ik geen MySQL gebruik, maar dit is 'the general idea'. ;)

edit:
Reminder to myself: vaker refreshen voor je post...

[ Voor 7% gewijzigd door Verwijderd op 21-01-2007 22:55 ]


  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
De safety van WHOAMI en de LIMIT van de ander moeten het oplossen! Bedankt...

Vooralsnog dacht ik dat je UNIONS het beste kon vermijden... maar deze mogelijkheid zit er natuurlijk in met een bepaalde reden.. ;-)
Pagina: 1