Sql sortering uit twee tabellen ?

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

  • a3vd
  • Registratie: Januari 2006
  • Laatst online: 31-07 20:53
Mijn vraag

Voor onze band heb ik alle songs in een tabel gezet Nummers

Fields Nr, Titel, Artiest/Band,pdf

Nu heb ik een tweede tabel gemaakt genaamd Oefenavond

Fields Oefenavond,1,2,3,4,5,6,7,8 (Bij 1 t/m 8 staat het nummer ingevuld uit de tabel nummers)


SELECT
Nummers.Nr,
Nummers.Titel,
Nummers.`Artiest / Band`,
Nummers.pdf
FROM oefenavond
, Nummers
WHERE (Nummers.Nr in (oefenavond.`1`,oefenavond.`2`,oefenavond.`3`,oefenavond.`4`,oefenavond.`5`,oefenavond.`6`,oefenavond.`7`,oefenavond.`8`,oefenavond.`9`,oefenavond.`10`,oefenavond.`11`,oefenavond.`12`,oefenavond.`13`,oefenavond.`14`,oefenavond.`15`,oefenavond.`16`,oefenavond.`17`)) AND (oefenavond.Oefenavond = 1)


Ik krijg nu wel alle gewenste nummers maar de ordering klopt niet
hij sorteert zelf i.p.v op field niveau

Hoe kan ik de lijst wel correct gesorteerd krijgen ?

Beste antwoord (via a3vd op 14-11-2016 14:53)


Verwijderd

Ik denk dat je tabel per definitie al een beetje shaky is voor het resultaat wat je wilt.

Als ik jou was zou ik het geheel opnieuw opzetten en dan het fenomeen 'relationele database' in je achterhoofd houden.

Een relationele database zal achteraf meer individuele records opleveren in de tabel waar je je oefenavond/nummers gaat vasthouden maar je voorkomt ermee dat je data in tig verschillende kolommen terecht komt, met alle onhandigheden van dien.

Mocht je het echt goed willen opzetten dan zou je er een Django projectje van kunnen maken, door slim om te springen met de models en inline-models kun je achteraf tot een heel overzichtelijke database komen + er zit een admin pagina ingebakken waar je handig elke repetitie in kunt bijhouden.

[ Voor 39% gewijzigd door Verwijderd op 14-11-2016 14:24 ]

Alle reacties


Acties:
  • 0 Henk 'm!

  • Rannasha
  • Registratie: Januari 2002
  • Laatst online: 11-09 12:16

Rannasha

Does not compute.

Zoek eens op wat "ORDER BY" doet :)

|| Vierkant voor Wiskunde ||


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Nou willen we best mensen helpen die problemen hebben maar we verwachten toch écht dat je een heel klein beetje zelfredzaamheid toont. Zelfs op zijn Nederlands vind je met [google=sql sorteren] talloze resultaten die je direct vertellen hoe je sorteert op de velden waarop jij wil sorteren.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ok, iets beter gelezen en je probleem is net iets anders.

Tabellen met getallen in de veldnamen zijn eigenlijk bijna altijd een indicatie dat je datamodel niet goed is. Je krijgt daardoor problemen als dit...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 20:47
Rannasha schreef op maandag 14 november 2016 @ 13:15:
Zoek eens op wat "ORDER BY" doet :)
Daar krijg je met dit datamodel niet gemakkelijk resultaat mee :)

Het probleem is dat de 8 nummers als afzonderlijke kolommen zijn gedefinieerd op één rij. SQL kan rijen sorteren maar kolommen niet. Je kunt truuks uithalen (iets als ORDER BY CASE Nummers.Nr WHEN oefenavond.`1` THEN 1 WHEN oefenavond.`2` THEN 2 END) maar het ligt veel meer voor de hand om je datamodel te normaliseren. Maak een koppeltabel tussen oefenavond en Nummers waarin je minimaal de kolommen oefenavondNr, NummersNr en VolgNr vastlegt.

Kijk ook even naar je naamgeving.. (Nederlandse tabelnamen wat mij betreft ok, maar je gebruikt wel enkelvoud en meervoud door elkaar.. de numerieke kolomnamen komen uiteraard te vervallen :)).

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Acties:
  • 0 Henk 'm!

  • a3vd
  • Registratie: Januari 2006
  • Laatst online: 31-07 20:53
Rannasha schreef op maandag 14 november 2016 @ 13:15:
Zoek eens op wat "ORDER BY" doet :)
Zelfs een order by Field als hieronder geeft niet het gewenste resultaat.

ORDER BY FIELD(oefenavond.`1`,oefenavond.`2`,oefenavond.`3`,oefenavond.`4`,oefenavond.`5`,oefenavond.`6`,oefenavond.`7`,oefenavond.`8`, oefenavond.`9`,oefenavond.`10`,oefenavond.`11`,oefenavond.`12`,oefenavond.`13`,oefenavond.`14`,oefenavond.`15`,oefenavond.`16`,oefenavond.`17`)

Acties:
  • 0 Henk 'm!

  • a3vd
  • Registratie: Januari 2006
  • Laatst online: 31-07 20:53
NMe schreef op maandag 14 november 2016 @ 13:32:
Ok, iets beter gelezen en je probleem is net iets anders.

Tabellen met getallen in de veldnamen zijn eigenlijk bijna altijd een indicatie dat je datamodel niet goed is. Je krijgt daardoor problemen als dit...
Ik zal de fieldname eens veranderen :?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

a3vd schreef op maandag 14 november 2016 @ 13:38:
[...]

Ik zal de fieldname eens veranderen :?
Dat is het punt niet. Je zal je tabel moeten normaliseren zodat je niet een veld per avond hebt maar een rij per avond. Waar je vervolgens heel mooi op kan sorteren met ORDER BY. ;)

[ Voor 7% gewijzigd door NMe op 14-11-2016 13:41 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Afvalzak
  • Registratie: Oktober 2008
  • Laatst online: 31-08 12:02

Afvalzak

Zet jij mij even buiten?

a3vd schreef op maandag 14 november 2016 @ 13:38:
[...]


Ik zal de fieldname eens veranderen :?
Ik zou beginnen met een koppeltabel te maken tussen nummers en oefenavond zodat je voor elke oefenavond een rij hebt (en dus geen kolom) zoals nescafe zegt.
Met deze structuur kom je alleen maar meer in de problemen.

Een kolomnaam met een " / " erin lijkt me overigens ook niet heel verstandig, maar dat is bijzaak voor je huidige probleem

Last.fm | Code Talks


Acties:
  • 0 Henk 'm!

  • a3vd
  • Registratie: Januari 2006
  • Laatst online: 31-07 20:53
NMe schreef op maandag 14 november 2016 @ 13:41:
[...]

Dat is het punt niet. Je zal je tabel moeten normaliseren zodat je niet een veld per avond hebt maar een rij per avond. Waar je vervolgens heel mooi op kan sorteren met ORDER BY. ;)
Ik heb nu toch 1 rij per avond ?

Veld oefenavond geeft nummer oefenavond
Song 1 is eerste nummer
Song 2 is tweede etc

Nu is de lijst bijvoorbeeld

1 (oefenavond) , 6 13 , 76 , 4

Als ik mijn query nu uitvoer krijg ik de lijst result :

4,6,13,76 (hij sorteerd ze dus en dat wil ik niet)

Lijst moet blijven
6,13,76,4 zijn

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Ik weet toch zonder uitleg niet waar die getallen voor staan? Songs dan in plaats van avonden, je wil geen kolommen voor elke song, je wil een rij voor elke song. Heb je die link die ik gaf nou al eens doorgelezen?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • Beste antwoord
  • +1 Henk 'm!

Verwijderd

Ik denk dat je tabel per definitie al een beetje shaky is voor het resultaat wat je wilt.

Als ik jou was zou ik het geheel opnieuw opzetten en dan het fenomeen 'relationele database' in je achterhoofd houden.

Een relationele database zal achteraf meer individuele records opleveren in de tabel waar je je oefenavond/nummers gaat vasthouden maar je voorkomt ermee dat je data in tig verschillende kolommen terecht komt, met alle onhandigheden van dien.

Mocht je het echt goed willen opzetten dan zou je er een Django projectje van kunnen maken, door slim om te springen met de models en inline-models kun je achteraf tot een heel overzichtelijke database komen + er zit een admin pagina ingebakken waar je handig elke repetitie in kunt bijhouden.

[ Voor 39% gewijzigd door Verwijderd op 14-11-2016 14:24 ]


Acties:
  • +1 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op maandag 14 november 2016 @ 14:20:
Mocht je het echt goed willen opzetten dan zou je er een Django projectje van kunnen maken, door slim om te springen met de models en inline-models kun je achteraf tot een heel overzichtelijke database komen + er zit een admin pagina ingebakken waar je handig elke repetitie in kunt bijhouden.
Hoe precies voegt Django iets toe bovenop het domweg normaliseren van dit schoolvoorbeeld van een normalisatieslag?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

NMe schreef op maandag 14 november 2016 @ 13:41:
[...]

Dat is het punt niet. Je zal je tabel moeten normaliseren zodat je niet een veld per avond hebt maar een rij per avond. Waar je vervolgens heel mooi op kan sorteren met ORDER BY. ;)
Ik zou eerder zeggen 3 tabellen? Een met oefenavonden, een met liedjes en de derde die ze koppelt?

Acties:
  • 0 Henk 'm!

Verwijderd

NMe schreef op maandag 14 november 2016 @ 14:29:
[...]

Hoe precies voegt Django iets toe bovenop het domweg normaliseren van dit schoolvoorbeeld van een normalisatieslag?
Je hebt gelijk, het komt misschien een beetje vaag over met betrekking tot het huidige probleem. Ik zat alweer 10 stappen verder te denken over een goede interface om dit soort zaken bij te houden.

Van de andere kant had het iets bewuster bezig zijn met het opzetten van de database (iets waar Django je dan wel goed mee kan helpen) dit hele verhaal kunnen voorkomen.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Verwijderd schreef op maandag 14 november 2016 @ 14:36:
Van de andere kant had het iets bewuster bezig zijn met het opzetten van de database (iets waar Django je dan wel goed mee kan helpen) dit hele verhaal kunnen voorkomen.
Zijn genoeg frameworks die dat kunnen, waarom zou Django daar het beste voor zijn? Als TS geen Python kent, valt die optie al af, denk ik zo. Net als bijvoorbeeld Laravel, Symfony en Zend Framework afvallen, als je geen PHP kent...

Een framework is niets anders dan een digitaal (Zwitsers) zakmes, kort door de bocht uitgelegd.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

CH40S schreef op maandag 14 november 2016 @ 14:35:
[...]
Ik zou eerder zeggen 3 tabellen? Een met oefenavonden, een met liedjes en de derde die ze koppelt?
Spreekt voor zich maar aangezien hij nu al getallen in zijn genummerde kolommen heeft staan lijkt het me dat die derde tabel al bestaat. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

CH40S schreef op maandag 14 november 2016 @ 14:38:
[...]
Zijn genoeg frameworks die dat kunnen, waarom zou Django daar het beste voor zijn? Als TS geen Python kent, valt die optie al af, denk ik zo. Net als bijvoorbeeld Laravel, Symfony en Zend Framework afvallen, als je geen PHP kent...

Een framework is niets anders dan een digitaal (Zwitsers) zakmes, kort door de bocht uitgelegd.
'De beste' komt voort uit mijn mening, daar kunnen we dus nog weleens in verschillen. ;) Daarnaast kan -lomp gezegd- iedere kleuter een Django project maken aan de hand van de tutorial, ook zonder voorkennis van Python. Een van de redenen waarom ik het vaak aanraad voor simpele projecten.

Acties:
  • +2 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Zullen we hier maar ophouden met proberen een topicstarter die duidelijk nog wat te leren heeft over databases af te leiden met het leren van nóg een nieuwe techniek terwijl dat totaal geen meerwaarde biedt voor het oplossen van het daadwerkelijke probleem? ;)

[ Voor 23% gewijzigd door NMe op 14-11-2016 15:22 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • +1 Henk 'm!

  • a3vd
  • Registratie: Januari 2006
  • Laatst online: 31-07 20:53
Mijn probleem was inderdaad een verkeerde opbouw van de tabellen, inmiddels probleempje opgelost.

Ik heb de oefenavond tabel uit twee kolommen laten bestaan Oefenavond en Nr en nu klopt de ingevoerde volgorde wel perfect.

Iedereen bedankt !

Sorry dat ik nog wat moet leren en het hier vroeg :-(

Acties:
  • 0 Henk 'm!

Verwijderd

NMe schreef op maandag 14 november 2016 @ 15:15:
Zullen we hier maar ophouden met proberen een topicstarter die duidelijk nog wat te leren heeft over databases af te leiden met het leren van nóg een nieuwe techniek terwijl dat totaal geen meerwaarde biedt voor het oplossen van het daadwerkelijke probleem? ;)
Zegt de man die de discussie over het nut van een bepaald framework een goede zwengel gaf :9

Maar je hebt gelijk, ik moet leren bij de feiten te blijven en niet zo af te dwalen.

Acties:
  • 0 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 23:52

Reinier

\o/

a3vd schreef op maandag 14 november 2016 @ 15:22:
Mijn probleem was inderdaad een verkeerde opbouw van de tabellen, inmiddels probleempje opgelost.

Ik heb de oefenavond tabel uit twee kolommen laten bestaan Oefenavond en Nr en nu klopt de ingevoerde volgorde wel perfect.

Iedereen bedankt !

Sorry dat ik nog wat moet leren en het hier vroeg :-(
Dan is je model nog steeds shaky. Wat is een oefenavond in jouw datamodel precies?

Acties:
  • 0 Henk 'm!

  • a3vd
  • Registratie: Januari 2006
  • Laatst online: 31-07 20:53
Met de Tabel oefenavond, bepaal ik welke nummers er op die avond geoefend moeten worden.
Het kan zijn dat op oefenavond 1 er 14 nrs staan en op oefenavond 2 maar 6

de Nummers hebben een relatie met de nummers tabel !

Wat is hier shaky aan ? Leer graag bij ;)

Acties:
  • 0 Henk 'm!

  • frumper
  • Registratie: Februari 2008
  • Laatst online: 15:25
Misschien even een rare vraag, maar heb je aan het begin ook gewoon eens de tabellen die je nodig bent op papier uitgetekend om te zien of je de juiste verbanden kon leggen? Wat je wil doen is namelijk geen ingewikkelde structuur en had je denk ik zelf meteen gezien als je het even op papier had uitgetekend...

Life is what happens while you're busy making other plans


Acties:
  • +1 Henk 'm!

  • Reinier
  • Registratie: Februari 2000
  • Laatst online: 23:52

Reinier

\o/

a3vd schreef op maandag 14 november 2016 @ 16:30:
Met de Tabel oefenavond, bepaal ik welke nummers er op die avond geoefend moeten worden.
Het kan zijn dat op oefenavond 1 er 14 nrs staan en op oefenavond 2 maar 6

de Nummers hebben een relatie met de nummers tabel !

Wat is hier shaky aan ? Leer graag bij ;)
Eén oefenavond (met datum, tijdstip, locatie, whatever) is één ding en dus één record in een tabel. In jouw oplossing met in totaal twee tabellen is een oefenavond een verzameling van meerdere records.
De nette oplossing is al meerdere keren genoemd: drie tabellen. Oefenavond, nummer en een koppeltabel daartussen met daarin tevens de sortering.
Pagina: 1