Toon posts:

[mysql] "ORDER BY" maar dan net ff anders

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een mysql database als volgt:

bla3
bla2
bla1
bla2
bla1
bla3
bla3
bla1
bla2


nu wil ik als result dit krijgen:

bla1
bla2
bla3
bla1
bla2
bla3
bla1
bla2
bla3


hoe krijg ik dat voor elkaar? ik wil het nu gaan oplossen met 1 of ander script die de volgorde berekend, en dan de volgorde als extra column aan de table toevoegen, maar het moet ook makkelijker kunnen denk ik (gewoon in mysql zelf bijv.)

  • Batsies
  • Registratie: Mei 2002
  • Laatst online: 27-01-2022

Batsies

E-Developing

Is de sequence altijd 123 ? en is bla altijd 'bla' Of is per groepje van 123 het veld in kolom 1 gelijk (bla1 bla1 bla1, bla2 bla2 bla2)?

E-Developing


Verwijderd

Topicstarter
Batsies schreef op donderdag 09 november 2006 @ 10:41:
Is de sequence altijd 123 ? en is bla altijd 'bla' Of is per groepje van 123 het veld in kolom 1 gelijk (bla1 bla1 bla1, bla2 bla2 bla2)?
de sequence is een cijfer van bijv. 1 t/m 100...
en kolom 1 is eigenlijk altijd anders...

nu ff een uitgebreider voorbeeld:

de3
het2
een1
paard2
hond1
vis3
fiets4
rood1
groen2
mark3
rick3
erik4
jeroen2


moet dus worden:

een1
het2
de3
fiets4
hond1
paard2
vis3
erik4
rood1
groen2
mark3
jeroen2
rick3

Verwijderd

Verwijderd schreef op donderdag 09 november 2006 @ 10:47:
[...]


de sequence is een cijfer van bijv. 1 t/m 100...
en kolom 1 is eigenlijk altijd anders...

nu ff een uitgebreider voorbeeld:

de3
het2
een1
paard2
hond1
vis3
fiets4
rood1
groen2
mark3
rick3
erik4
jeroen2


moet dus worden:

een1
het2
de3
fiets4
hond1
paard2
vis3
erik4
rood1
groen2
mark3
jeroen2
rick3
Hoe kan de db dat uberhaupt weten welke 1 er eerst moet, of welke 2? Dit is toch geen sorteren!?! Of mag het op willekeurige volgorde?

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Order op je tweede kolom.
En dan in je code de overgangen opzoeken, en gewoon eentje pakken van het eerste deel, eentje van het tweede deel, eentje van het derde deel, en dan de volgende van het eerste deel, etc..

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Verwijderd

Topicstarter
Verwijderd schreef op donderdag 09 november 2006 @ 10:50:
[...]


Hoe kan de db dat uberhaupt weten welke 1 er eerst moet, of welke 2? Dit is toch geen sorteren!?! Of mag het op willekeurige volgorde?
het is telkens oplopend, totdat er geen groter getal meer is, dan moet het weer bij het laagste nummer beginnen.

stel dat er 4 x een 4 in komt, en 3 x een 3 en 2 x een 2 en 1 x een 1 dan wordt het alsvolgt:

1
2
3
4
2
3
4
3
4
4

Verwijderd

Maar moet hij dan het eerste opvolgende nummer in de recordset pakken, of een willekeurige? Zoals je de vraag nu stelt kunnen er namelijk veel verschillende combinaties uitkomen.

(daarnaast denk ik dat je dit beter kunt programmeren, maar dat is een ander verhaal).

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 14:25

Janoz

Moderator Devschuur®

!litemod

Dit kan natuurlijk nooit. Hoe moet de database nu weten welk record als eerste moet? Moet dat de 1 met 'een', 'hond' of 'rood' zijn?

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


Verwijderd

Topicstarter
Verwijderd schreef op donderdag 09 november 2006 @ 11:01:
Maar moet hij dan het eerste opvolgende nummer in de recordset pakken, of een willekeurige? Zoals je de vraag nu stelt kunnen er namelijk veel verschillende combinaties uitkomen.

(daarnaast denk ik dat je dit beter kunt programmeren, maar dat is een ander verhaal).
ja hij moet dus telkens het eerst opvolgende nummer pakken,

maargoed, ik dacht voordat ik er een scriptje voor ga maken, eerst vragen of er in mysql 1 of andere functie/mogelijkheid waarmee dit gemakkelijk kan.. maar blijkbaar niet dus.

Verwijderd

Janoz schreef op donderdag 09 november 2006 @ 11:09:
Dit kan natuurlijk nooit. Hoe moet de database nu weten welk record als eerste moet? Moet dat de 1 met 'een', 'hond' of 'rood' zijn?
Zoals ik het nu interpreteer moet het het record zijn met het eerste opeenvolgende nummer en het laagste nog niet gebruikte recordID...

Verwijderd

Topicstarter
Janoz schreef op donderdag 09 november 2006 @ 11:09:
Dit kan natuurlijk nooit. Hoe moet de database nu weten welk record als eerste moet? Moet dat de 1 met 'een', 'hond' of 'rood' zijn?
er is nog een ander veld, namelijk datum dus wanneer er 2 dezelfde waardes inzitten, worden die gesorteerd op datum.

  • paulh
  • Registratie: Juli 1999
  • Laatst online: 28-11 15:14
Je zal inderdaad een extra waarde moeten hebben die voor de rij van woorden allemaal gelijk zijn. Deze waarde moet uiteraard weer uniek zijn over alle zinnen.

Dan kan je een order by gelijkveld, getalveld doen

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 01-12 20:47
Het volgende geeft de gewenste uitvoer:
SQL:
1
2
3
4
5
6
7
select a.woord, a.getal
from tabel a
inner join tabel b
on a.getal = b.getal
   and b.datum <= a.datum
group by a.woord, a.getal
order by count(b.getal), a.getal

Het werkt door alle velden met hetzelfde nummer te tellen die een oudere of gelijke datum hebben.
De oudste heeft alleen zichzelf als gelijke, dus dat is waarde 1, de volgende krijgt waarde 2, op die waarde wordt gesorteerd, en daarna op getal, zodat je rijtjes krijgt zoals de TS vraagt.
Pagina: 1