Hoi!
Ik heb het volgende probleem:
Bij het printen van een overzicht zorgen we er netjes voor dat alle 'foreign keys' vervangen worden. Dus: in plaats van de id (zoals het in de overzichts tabel A staat) printen we de bijbehorende naam (die natuurlijk in een aparte tabel B staat). Er wordt vaak naar meerdere B tabellen verwezen.
Als je nu gaat sorteren op een col waar een foreign key achter zit, wordt echter gesorteerd op de id en dus niet op naam (die staat ook in B, niet in A)!
Een mogelijke oplossing:
Bij het wijzigen (UPDATE, INSERT, DELETE) van zo een tabel B ervoor zorgen dat de ids op dezelfde volgorde als de 'namen' komen.
Aangezien echter gereferenced wordt kan dat niet door simpel de tabel (deze zijn gelukkig klein) uit te lezen en opnieuw erin te pompen. Maar het kan alsnog door eerst alle ids met auto_increment (of willekeurig groot getal) te verhogen en vervolgens alles naar alphabet gesorteerd weer te UPDATEN, id beginnend bij 1. [bErg[/b] hacky vind ik.
Het lastige is dat we nu gaan vertrouwen op een beetje rare code en de UPDATE CASCADE functionaliteit van de database. Het gaat hier om een bedrijfscritisch systeem. Er mag dus absoluut niets mis gaan!
Andere oplossing:
Resultset halen zonder order by en dan de arary in PHP gaan sorteren. Vervolgens paging (dus uitzoeken welke resultaten we willen hebben, bijv. 120-140) Probleem dan is dat de meeste van die A (overzichts) tabellen wel groot zijn... wordt dus langzaam.
Dit moet toch wel makkelijker kunnen? Op dit moment draaien we nog 4.0.22, maar de overstap naar 4.1 kan nu ook wel, mocht dat hiervoor nodig / handig zijn.
Ik heb het volgende probleem:
Bij het printen van een overzicht zorgen we er netjes voor dat alle 'foreign keys' vervangen worden. Dus: in plaats van de id (zoals het in de overzichts tabel A staat) printen we de bijbehorende naam (die natuurlijk in een aparte tabel B staat). Er wordt vaak naar meerdere B tabellen verwezen.
Als je nu gaat sorteren op een col waar een foreign key achter zit, wordt echter gesorteerd op de id en dus niet op naam (die staat ook in B, niet in A)!
Een mogelijke oplossing:
Bij het wijzigen (UPDATE, INSERT, DELETE) van zo een tabel B ervoor zorgen dat de ids op dezelfde volgorde als de 'namen' komen.
Aangezien echter gereferenced wordt kan dat niet door simpel de tabel (deze zijn gelukkig klein) uit te lezen en opnieuw erin te pompen. Maar het kan alsnog door eerst alle ids met auto_increment (of willekeurig groot getal) te verhogen en vervolgens alles naar alphabet gesorteerd weer te UPDATEN, id beginnend bij 1. [bErg[/b] hacky vind ik.
Het lastige is dat we nu gaan vertrouwen op een beetje rare code en de UPDATE CASCADE functionaliteit van de database. Het gaat hier om een bedrijfscritisch systeem. Er mag dus absoluut niets mis gaan!
Andere oplossing:
Resultset halen zonder order by en dan de arary in PHP gaan sorteren. Vervolgens paging (dus uitzoeken welke resultaten we willen hebben, bijv. 120-140) Probleem dan is dat de meeste van die A (overzichts) tabellen wel groot zijn... wordt dus langzaam.
Dit moet toch wel makkelijker kunnen? Op dit moment draaien we nog 4.0.22, maar de overstap naar 4.1 kan nu ook wel, mocht dat hiervoor nodig / handig zijn.
[ Voor 3% gewijzigd door JayVee op 18-01-2005 17:25 ]
ASCII stupid question, get a stupid ANSI!