MySQL kolom uitlezen en gedeelte naar nieuwe kolom
Ik heb thuis een simpele database welke is ingevuld met dvd's die ik in huis heb.
Inmiddels gebruik ik natuurlijk geen dvd's meer, dus alles moet nu beter geindexeerd worden en alles kan naar de zolder.
De DVD's zijn allemaal opgeborgen in DVD koffers (diverse kleuren), DVD mappen en Spindels.
Om dit nu allemaal netter te maken is het de bedoeling dat een bepaalde kolom van de database opgesplitst gaat worden.
Hier een voorbeeld van het huidige:
----------------------------------
ID | titel | Locatie
----------------------------------
1 | Shrek | Zwart - 13
2 | Alien 2 | Grijs - 54
3 | Toy Story | Kindermap
----------------------------------
hier een voorbeeld van hoe het moet worden:
------------------------------------------
ID | titel | Locatie | Nummer
------------------------------------------
1 | Shrek | Zwart | 13
2 | Alien 2 | Grijs | 54
3 | Toy Story | Kindermap |
------------------------------------------
Het is dus eigenlijk de bedoeling dat de kolom "Locatie" opgedeeld wordt en dat het nummer in die kolom (als deze bestaat) in de nieuwe kolom "Nummer" geplaatst wordt, en de kofferkleur, of de betreffende map, blijft staan.
Ik heb geen flauw idee of dit mogelijk is, en waar ik moet beginnen om dit te realiseren, áls het al mogelijk is.
Is er iemand die mij de juiste richting in kan wijzen?
Het is een database met totaal bijna 1600 titels, dus het zou erg vervelend zijn als ik alles handmatig moet aanpassen.
Bij voorbaat dank!
Goeny
Hierbij ga ik er wel vanuit dat je altijd hetzelfde formaat hebt. Dus een string, '-', getal. Of alleen een string. Als er in de string nog een streepje staat, of als er na het getal nog andere karakters staan dan gaat het fout. Ook trek ik de laatste drie karakters uit de string om dat te casten naar een integer. Als je nu '- 1' als laatste drie hebt, of '1234' aan het einde, dan werkt het dus ook niet goed. Ik heb het nu alleen even zo gedaan, uiteraard kan het nog verfijnd worden als blijkt dat er teveel uitzonderingen zijn.
Om te testen heb ik even deze tabel met inhoud gemaakt:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
CREATE TABLE split(
tekst VARCHAR(100),
location VARCHAR(100),
nummer INT
);
INSERT INTO split(tekst) VALUES('Zwart - 13'),('Grijs - 54'),('Kindermap');
tekst VARCHAR(100),
location VARCHAR(100),
nummer INT
);
INSERT INTO split(tekst) VALUES('Zwart - 13'),('Grijs - 54'),('Kindermap');
En het SQL statement voor de split:
Code (php)
1
2
3
2
3
UPDATE split
SET nummer = CAST(RIGHT(tekst,3) AS UNSIGNED),
location = IF(LOCATE('-',tekst) > 0, TRIM(LEFT(tekst, LOCATE('-',tekst)-1)), tekst);
SET nummer = CAST(RIGHT(tekst,3) AS UNSIGNED),
location = IF(LOCATE('-',tekst) > 0, TRIM(LEFT(tekst, LOCATE('-',tekst)-1)), tekst);
Resultaat:
Ik heb m uitgevoerd op mijn Db (na eerst ff een backup gemaakt te hebben) en het werkt perfect!
Er waren ca. 5 titels die nu niet meer goed staan. Maar dat kwam omdat daarvan de locatie bestond uit meer dan 1. (bijv: Zwart - 18 / Kindermap)
Maar die paar doe ik met de hand even.
Alles is nu perfect gesorteerd.
Bedankt daarvoor !!