Ik loop tegen een probleem aan. Ik wil de volgende set sorteren:
Moet worden:
Er moet dus als volgt gesorteerd worden:
1. Alle records met type_id = 1 moeten bovenaan (1 is niet de echte waarde, kan ook 38 zijn, het gaat om één specifiek getal)
2. Daarna wordt er gesorteerd op het hoe vaak 'foo' voorkomt, aflopend
3. MAAR: Als er records zijn met een type_id != 1 maar een foo waarde die ook bij een record met type_id = 1 voorkomt, dan moet dit record direct na dit record geplaatst worden.
De crux zit hem dus in die 3e beperking.
1. is te doen met:
1 & 2 is te doen met (waarbij count_kolom een kolom is met COUNT() waarden die middels een subquery gevormd wordt):
Alleen voor 1,2 en 3 heb ik nog geen oplossing. Ik heb het geprobeerd met usort() en dan een eigen functie, maar heb nog geen werkende compare functie gevonden.
Achterliggende probleem: Het gaat om een database van personen die ergens wonen. Ik wil een overzicht tonen waarin alle plaatsen op een rij staan, de meestvoorkomende eerst. Maar nu zijn er ook personen die betalen, hun woonplaatsen (en alle andere mensen die daar ook wonen) moet bovenaan staan, nog voor de meestvoorkomende.
kolom id type_id foo 1 2 512 2 1 312 3 4 100 4 2 312 5 1 400 6 1 346 7 3 400
Moet worden:
kolom id type_id foo 2 1 312 4 2 312 5 1 400 7 3 400 6 1 346 1 2 512 3 4 100
Er moet dus als volgt gesorteerd worden:
1. Alle records met type_id = 1 moeten bovenaan (1 is niet de echte waarde, kan ook 38 zijn, het gaat om één specifiek getal)
2. Daarna wordt er gesorteerd op het hoe vaak 'foo' voorkomt, aflopend
3. MAAR: Als er records zijn met een type_id != 1 maar een foo waarde die ook bij een record met type_id = 1 voorkomt, dan moet dit record direct na dit record geplaatst worden.
De crux zit hem dus in die 3e beperking.
1. is te doen met:
SQL:
1
| ORDER BY FIELD(type_id, '1') |
1 & 2 is te doen met (waarbij count_kolom een kolom is met COUNT() waarden die middels een subquery gevormd wordt):
SQL:
1
| ORDER BY FIELD(type_id, '1') DESC, count_kolom DESC |
Alleen voor 1,2 en 3 heb ik nog geen oplossing. Ik heb het geprobeerd met usort() en dan een eigen functie, maar heb nog geen werkende compare functie gevonden.
Achterliggende probleem: Het gaat om een database van personen die ergens wonen. Ik wil een overzicht tonen waarin alle plaatsen op een rij staan, de meestvoorkomende eerst. Maar nu zijn er ook personen die betalen, hun woonplaatsen (en alle andere mensen die daar ook wonen) moet bovenaan staan, nog voor de meestvoorkomende.