Ik heb een databasetabel die heel krom is opgebouwd, omdat de ID's niet helemaal auto_increment zijn, het werkt namelijk met 2 Id's, met eerste deel is een foreignkey naar een andere tabel, gevolgd door een "_", gevolgd door de primarykey van de huidige tabel, maar, niet unique.
Dus je kan bijv "id" 123_133 hebben, maar ook 123_111 en 131_133 en 131_111 hebben. Het eerste deel reffereert dus naar een andere tabel, en het tweede deel is het unieke ID bij de foreignkey. Nouja, heel vies dus.
Nou wil ik sorteren op dat ID, en dan de vorige record pakken. Er zijn dan eigenlijk 2 mogelijkheden:
- een nieuw veld ID maken, en de huidige "id" opsplitsen naar de foreign key, en het andere deel auto_increment unique maken
- een functie schrijven om met de oude vieze manier door te gaan
Aangezien de database maar wordt uitgebreid, kan ik optie 1 nog niet doen, dus wil ik me gaan focussen op optie 2, een functie schrijven.
Ik kan bijv. doen:
123_111, 111 eruit halen, + of - 1, en dan krijg ik bijv. 123_110 , maar ik weet niet zeker of 123_110 wel bestaat, kan wel een loopje maken, net zolang -1 totdat er een record komt die bestaat, maar dat lijkt me niet zo'n goed idee als er meer dan 100 records per 'foreignkey' zijn. Dus ik wil eigenlijk op de manier zoals LIMIT 111,1 werkt de vorige eruit halen, zo haal je Record nummer 111 er uit.
Hoe krijg ik dus de 'plaats' waar record 123_111 - 1 staat?
Dus je kan bijv "id" 123_133 hebben, maar ook 123_111 en 131_133 en 131_111 hebben. Het eerste deel reffereert dus naar een andere tabel, en het tweede deel is het unieke ID bij de foreignkey. Nouja, heel vies dus.
Nou wil ik sorteren op dat ID, en dan de vorige record pakken. Er zijn dan eigenlijk 2 mogelijkheden:
- een nieuw veld ID maken, en de huidige "id" opsplitsen naar de foreign key, en het andere deel auto_increment unique maken
- een functie schrijven om met de oude vieze manier door te gaan
Aangezien de database maar wordt uitgebreid, kan ik optie 1 nog niet doen, dus wil ik me gaan focussen op optie 2, een functie schrijven.
Ik kan bijv. doen:
123_111, 111 eruit halen, + of - 1, en dan krijg ik bijv. 123_110 , maar ik weet niet zeker of 123_110 wel bestaat, kan wel een loopje maken, net zolang -1 totdat er een record komt die bestaat, maar dat lijkt me niet zo'n goed idee als er meer dan 100 records per 'foreignkey' zijn. Dus ik wil eigenlijk op de manier zoals LIMIT 111,1 werkt de vorige eruit halen, zo haal je Record nummer 111 er uit.
Hoe krijg ik dus de 'plaats' waar record 123_111 - 1 staat?