Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/07/2011, 08h44   #1
Futur Membre du Club
 
Homme
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 16
Points : 16
Par défaut Un replace dans un replace

Bonjour,

Je vous explique rapidement, voici ma table

Code :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE `idtv4` (
  `magasin` varchar(128) NOT NULL,
  `broadcaster_id` varchar(128) NOT NULL,
  `content_id` varchar(128) NOT NULL,
  `filename` varchar(128) NOT NULL,
  `title` varchar(128) NOT NULL,
  PRIMARY KEY (`content_id`,`filename`),
  KEY `index_content_id` (`content_id`),
  KEY `index_filename` (`filename`),
  KEY `index_title` (`title`),
  KEY `index_magasin` (`magasin`,`broadcaster_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Liste des commandes';
Avec mes données:
Code :
1
2
3
4
5
magasin,broadcaster_id,content_id,filename,title
MAGASIN,BRD,CAN9997BA,CAN102233.mpg,BA-Garde à vue
MAGASIN,BRD,CAN9997,CAN102232.mpg,Garde à vue
MAGASIN,BRD,CAN9993BA,CAN103280.mpg,BA-Cent jours à Palerme
MAGASIN,BRD,CAN9993HD,CAN103279.mpg,Cent jours à Palerme HD
J'aimerais en une seule requête:
- ajouter une 4ème colonne
- que cette colonne réplique la colonne content_id déjà existante
- qu'en copiant la colonne il enlève "CAN"
- qu'en copiant la colonne il enlève "BA"

Ainsi pour avoir:
Code :
1
2
3
4
5
magasin,broadcaster_id,content_id,filename,title,mid
CANALPLAY,CAN,CAN9997BA,CAN102233.mpg,BA-Garde à vue,9997
CANALPLAY,CAN,CAN9997,CAN102232.mpg,Garde à vue,9997
CANALPLAY,CAN,CAN9993HD,CAN103279.mpg,Cent jours à Palerme HD,9993HD
CANALPLAY,CAN,CAN9993BA,CAN103280.mpg,BA-Cent jours à Palerme,9993
Ceci je fais le faire en 3 requêtes séparées, mais impossible pour moi de le faire en une seule et unique requête


Voici mes 3 requêtes:
Code :
ALTER TABLE idtv4 ADD COLUMN mid varchar(128) NOT NULL;
Code :
1
2
3
UPDATE idtv4
SET mid = REPLACE(content_id, 'CAN', '')
WHERE content_id LIKE '%CAN%';
Code :
1
2
3
UPDATE idtv4
SET mid = REPLACE(mid, 'BA', '')
WHERE content_id LIKE '%BA%';
Sethenssen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 15h43   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 008
Points : 18 279
Points : 18 279
Envoyer un message via MSN à CinePhil
À première vue je ne vois pas de solution sans faire deux requêtes UPDATE.
Mais ce que je vois surtout c'est que tes données sont très mal modélisées !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 20h30   #3
Futur Membre du Club
 
Homme
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 16
Points : 16
Bonjour,

A cause de la virgule comme séparateur ou à cause des varchar(128) dans la BDD?
Sethenssen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 21h51   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 008
Points : 18 279
Points : 18 279
Envoyer un message via MSN à CinePhil
Les VARCHAR partout alors que les identifiants devraient être de type entier, la redondance de données, l'index inutile sur content_id puisque c'est la première colonne de la clé primaire... bref, autant utiliser un tableur !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 23h45   #5
Futur Membre du Club
 
Homme
Inscription : juillet 2008
Messages : 58
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2008
Messages : 58
Points : 16
Points : 16
Oui je ne me suis pas pris la tête, c'était à titre d'exemple pour démontrer ma demande
Sethenssen est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h34.


 
 
 
 
Partenaires

Hébergement Web