2010-08-26 5 views
0

Je me demande simplement si quelqu'un peut m'aider avec le problème suivant.Modifier le texte dans les colonnes

J'ai une base de données dans MySQL et j'utilise PHPMyAdmin pour interagir avec la base de données. Par conséquent, dans la table example_table_name, j'ai deux colonnes product_item_short et product_item_long qui ont des URL dans celles-ci. Maintenant, il y a 3000 lignes de données et à titre d'exemple l'URL dans chacun commence par data/image/someimage.png.

Dans les deux colonnes, j'ai besoin d'enlever le data/ et je voudrais savoir comment je pouvais ainsi cela en SQL.

Un grand merci

Répondre

0
UPDATE example_table 
SET product_item_short = SUBSTRING(product_item_short,6), 
    product_item_long = SUBSTRING(product_item_long,6); 
+0

A travaillé et merci pour l'aide. –

2

Vous pouvez utiliser la fonction SUBSTR():

UPDATE your_table 
SET product_item_short = SUBSTR(product_item_short, 6), 
     product_item_long = SUBSTR(product_item_long, 6); 

cas de test:

CREATE TABLE your_table (
    id int, 
    product_item_short varchar(50), 
    product_item_long varchar(50) 
); 


INSERT INTO your_table VALUES (1, 'data/image/someimage.png',   'data/image/someimage.png'); 
INSERT INTO your_table VALUES (2, 'data/other-folder/someimage.png', 'data/other-folder/someimage.png'); 
INSERT INTO your_table VALUES (3, 'data/no-folder.png',    'data/no-folder.png'); 
INSERT INTO your_table VALUES (4, 'data/image/path/three-levels.png', 'data/image/path/three-levels.png'); 

Résultat après UPDATE:

SELECT * FROM your_table; 
+------+-----------------------------+-----------------------------+ 
| id | product_item_short   | product_item_long   | 
+------+-----------------------------+-----------------------------+ 
| 1 | image/someimage.png   | image/someimage.png   | 
| 2 | other-folder/someimage.png | other-folder/someimage.png | 
| 3 | no-folder.png    | no-folder.png    | 
| 4 | image/path/three-levels.png | image/path/three-levels.png | 
+------+-----------------------------+-----------------------------+ 
4 rows in set (0.00 sec) 

MISE À JOUR:

Si vous une solution qui élimine le premier répertoire du chemin, que ce soit data/ ou anything-else/, vous pouvez utiliser la fonction LOCATE(), comme @Frank's suggested dans une autre réponse:

UPDATE your_table 
SET product_item_short = SUBSTR(product_item_short, LOCATE('/', product_item_short) + 1), 
     product_item_long = SUBSTR(product_item_long, LOCATE('/', product_item_long) + 1); 
+0

Bonjour, Merci pour cela. Donc, s'il s'agit de l'URL de l'image: data/image/someimage.jpg si j'utilise le SQL ci-dessus, il ne supprimera que les données/éléments? –

+0

@Bill: Il va dépouiller les 5 premiers caractères en réalité. J'ai mis à jour ma réponse avec un cas de test. Vérifiez si c'est ce que vous cherchez :) –

+0

C'est fantastique et j'apprécie vraiment votre aide :) –

1
UPDATE tablename 
SET product_item_short = REPLACE(product_item_short, 'data/image/someimage.png', 'newurl/something.png'); 
1

Si vous voulez être plus souple que ce que Daniel i décrit Dans sa réponse, vous pouvez utiliser quelque chose comme

SUBSTR(product_item_short, LOCATE('/', product_item_short) + 1) 

qui couperait tout après la première barre oblique.

+0

Bonne idée. Notez cependant que vos arguments sont inversés. Il devrait être 'LOCATE ('/', product_item_short)'. Il vous manque également la parenthèse fermante :) –

+0

@Daniel J'ai édité ma réponse, maintenant elle devrait être correcte. – Frank

+0

J'ai mentionné votre solution dans ma réponse ... +1 :) –