[php/mysql] lastige sorteer query

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Stel ik heb 10 rubrieken. Elke rubriek bevat een x aantal links. Nu staat voor elke rubriek aangegeven hoe de links gesorteerd dienen te worden. Nu wil ik in 1 query alle gegevens op de juiste manier gesorteerd eruit krijgen. Is dit uberhaupt mogelijk met MySQL?

Met een LEFT JOIN kan ik alle gegevens er wel uit krijgen, alleen niet per rubriek gesorteerd?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Je kunt op meer dan 1 kolom sorteren. Eerst sorteren op sorteervolgorde binnen de rubriek en dan op rubriek en je hebt keurig alles in de juiste volgorde.

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


Acties:
  • 0 Henk 'm!

Verwijderd

Nu staat voor elke rubriek aangegeven hoe de links gesorteerd dienen te worden.
En hoe staat dit aangegeven? Dit is nogal cruciaal lijkt me.

Makkelijkste is om in je rubriekentabel een sorteerveld aan te maken die deze sortering bewerkstelligt.

@Janoz: Volgens mij bedoelt hij dat de sortering per rubriek anders is :)

[ Voor 14% gewijzigd door Verwijderd op 05-03-2007 16:24 ]


Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Inderdaad, ik geef nu de sortering in de rubriek aan met cijfers... dus 1 is bijv op datum desc, 2 is is bijv op naam etc...

Ik heb dus 2 tabellen. 1 tabel met de rubrieken en 1 tabel met de links. In de tabel rubrieken staat aangegeven hoe gesorteerd dient te worden in die specifieke rubriek!

[ Voor 4% gewijzigd door RSD op 05-03-2007 16:26 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je kunt het zo doen:

Extra tabel sorting met de sorteringsvelden, dus waarbij bv 1 aangeeft dat het datum is.

Vervoglens in je query:
SQL:
1
2
3
4
5
6
7
8
SELECT
  &sorting.field_name
   ...
FROM 
  rubrieken INNER JOIN sorting ON rubrieken.sort_id = sorting.id, 
  links  
 ...
ORDER BY 1

Zoiets :)

Acties:
  • 0 Henk 'm!

  • RSD
  • Registratie: Maart 2001
  • Laatst online: 08-02-2017
Hmm, dat begrijp ik niet helemaal... vooral die & niet?

Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
ik heb nog geen oplossing bedacht voor het DESC of ASC idee.... maar hiermee ben je denk ik al een eind...

tabel rubriek ziet er zo uit:
code:
1
2
3
4
id       naam       orderby
1        Rubriek A 1
2        Rubriek B 2
3        Rubriek C 3


SQL:
1
2
3
4
5
6
SELECT  * 
FROM  `rubriek` 
LEFT  JOIN links
ON ( 1 = 1  )  #dan komen alle links in iedere rubriek... weet niet of dat je doel is...
ORDER  BY
rubriek.naam, ELT(rubriek.orderby, links.naam, links.datum, links.href )


heb het niet echt goed getest, misschien werkt dit niet voor datums enzo, amaar denk het wel...

[ Voor 9% gewijzigd door P.O. Box op 05-03-2007 18:17 ]


Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
Edwardvb schreef op maandag 05 maart 2007 @ 18:15:
ik heb nog geen oplossing bedacht voor het DESC of ASC idee.... maar hiermee ben je denk ik al een eind...

tabel rubriek ziet er zo uit:
code:
1
2
3
4
id       naam       orderby
1        Rubriek A 1
2        Rubriek B 2
3        Rubriek C 3


SQL:
1
2
3
4
5
6
SELECT  * 
FROM  `rubriek` 
LEFT  JOIN links
ON ( 1 = 1  )  #dan komen alle links in iedere rubriek... weet niet of dat je doel is...
ORDER  BY
rubriek.naam, ELT(rubriek.orderby, links.naam, links.datum, links.href )


heb het niet echt goed getest, misschien werkt dit niet voor datums enzo, amaar denk het wel...
oh, ik heb nog een idee, om dan de datum bijvoorbeeld DESC te sorteren... dit werkt niet als je teveel verschillende sorteringen hebt, maar je kunt de datum er bijvoorbeeld uittrekken... stel dat 2 = datum (zoals in vorige post...)... maak dan je selectie:

SQL:
1
2
3
4
5
6
SELECT  * 
FROM  `rubriek` 
LEFT  JOIN links
ON ( 1 = 1  )  #dan komen alle links in iedere rubriek... weet niet of dat je doel is...
ORDER  BY
rubriek.naam, ELT(rubriek.orderby, links.naam, 1, links.href ), links.datum DESC


stel nu dat je op links.naam (=1) sorteert, dan wordt er dus eerste gesorteerd op links.naam en daarna op links.datum DESC... die niet meer van belang is, behalve als twee links.naam gelijk zijn...
stel nu dat je op links.datum (=2) sorteert... dan wordt er dus eerst gesorteerd op 1... dus geen sortering, want die zijn allemaal gelijk, en daarna wordt er gesorteerd op links.datum DESC....

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je kunt natuurlijk ook gewoon in je script sorteren, zeker als er op de sorteerkolommen geen indices staan. Scheelt een hoop geknoei met lastige db queries terwijl de performance-gain zo goed als nihil is.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
.oisyn schreef op maandag 05 maart 2007 @ 18:41:
Je kunt natuurlijk ook gewoon in je script sorteren, zeker als er op de sorteerkolommen geen indices staan. Scheelt een hoop geknoei met lastige db queries terwijl de performance-gain zo goed als nihil is.
dat is natuurlijk helemaal waar...

Acties:
  • 0 Henk 'm!

Verwijderd

RSD schreef op maandag 05 maart 2007 @ 16:40:
Hmm, dat begrijp ik niet helemaal... vooral die & niet?
Je slaat de veldnaam op, mbv de &-operator haal je de waarde op van dat veld.

Bijv. je slaat op rubriek.datum in de sorteer-tabel; vervolgens wordt rubriek.datum geevalueerd door het &-teken. Maar idd, het kan veel makkelijker in de code-behind.
Pagina: 1