MySQL kolom uitlezen en gedeelte naar nieuwe kolom

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Goeny Goegoe

Goeny Goegoe

02/09/2013 10:47:14
Quote Anchor link
Goedemorgen,

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
 
PHP hulp

PHP hulp

27/12/2024 14:48:51
 
Erwin H

Erwin H

02/09/2013 13:01:49
Quote Anchor link
Voordat er een jojo komt met de suggestie dat het in php kan.... het kan ook compleet in SQL met een vrij simpel statement zelfs.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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');

En het SQL statement voor de split:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
UPDATE split
SET nummer = CAST(RIGHT(tekst,3) AS UNSIGNED),
  location = IF(LOCATE('-',tekst) > 0, TRIM(LEFT(tekst, LOCATE('-',tekst)-1)), tekst);

Resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
+------------+-----------+--------+
| tekst      | location  | nummer |
+------------+-----------+--------+
| Zwart - 13 | Zwart     |     13 |
| Grijs - 54 | Grijs     |     54 |
| Kindermap  | Kindermap |      0 |
+------------+-----------+--------+
 
Goeny Goegoe

Goeny Goegoe

03/09/2013 10:57:35
Quote Anchor link
Helemaal goed !!

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 !!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.