Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 24/08/2011, 10h18   #1
Invité régulier
 
Inscription : mai 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 37
Points : 6
Points : 6
Par défaut Requête pour inverser l'ordre d'un titre de sujet (forum)

Bonjour,

J'ai pour projet de refaire une restructuration des titres de sujets sur mon forum pour le chapitre des présentations.

Avec pas moins de 1600 sujets, je souhaiterais un peu d'aide et voir si le SQL pourrait m'aider pour réaliser ce que je souhaite faire.

Actuellement tous nos titres de sujets sont formulés de la sorte :

[pseudo] Département
Exemple : [Big moustaches] Ain

Je souhaiterais qu'il deviennent comme ceci

Département (pseudo)
Exemple : Ain (Big moustaches)

Modifier les [ par ( n'est pas réellement un problème.

Code :
1
2
UPDATE ibf_topics SET title = REPLACE(title, '[', '(') 
UPDATE ibf_topics SET title = REPLACE(title, ']', ')')
Ce qui me parait plus chaud c'est de faire une inversion des 2 mots...

Étant débutant en SQL, est-il possible à première vue de réaliser ceci par requête SQL ?

En vous remerciant d'avance
Sperafico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 10h32   #2
Membre éclairé
 
Avatar de juvamine
 
Développeur informatique
Inscription : mai 2004
Messages : 394
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2004
Messages : 394
Points : 377
Points : 377
J'espère que cela t'aidera :

Code :
1
2
3
4
5
6
declare @chaine varchar(1000)
SET @chaine = '[Big moustaches] Ain'
 
SELECT LTRIM(SUBSTRING(@chaine, CHARINDEX( ']', @chaine, 1) + 1, len(@chaine)))
 + SPACE(1)
 + LEFT(@chaine, charindex(']', @chaine))
Me retourne :
Ain [Big moustaches]

Il ne te reste qu'a intégrer cette expression dans ta requête en remplaçant @chaine par ton champ

A bientôt

juvamine
__________________
http://chat.developpez.com/ -- Salon Base de Données --
juvamine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 11h58   #3
Invité régulier
 
Inscription : mai 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 37
Points : 6
Points : 6
Merci pour cet exemple de code, je l'ai appliqué mais il me retourne une erreur de syntaxe. J'ai pourtant bien remplacé la valeur @chaine par le nom de mon champ "title".
Sperafico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 12h05   #4
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Quel est votre SGBD ?
Pouvez vous poster la requete complete non fonctionnelle ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 12h18   #5
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
si tu es sous Oracle, voici un sql

Code :
1
2
SELECT REPLACE(REPLACE( substrb(CHAMP_CAINE, instr(CHAMP_CAINE,']')+1)||' '||substrb(CHAMP_CAINE, 1, instr(CHAMP_CAINE,']')),'[','('),']',')')
FROM Ta_table
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 12h34   #6
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
et si tu es sous MsAcces voici le code


Code :
SELECT REPLACE(REPLACE( mid(Champ1, instr(Champ1,']')+1)+" "+mid(Champ1, 1, instr(Champ1,']')),'[','('),']',')') FROM table1
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 15h05   #7
Invité régulier
 
Inscription : mai 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 37
Points : 6
Points : 6
Citation:
Envoyé par Yanika_bzh Voir le message
Quel est votre SGBD ?
Mon SGBD est MYSQL 5.1.41.

Citation:
Envoyé par Yanika_bzh Voir le message
Pouvez vous poster la requete complete non fonctionnelle ?
Code :
1
2
3
4
5
6
7
SELECT `title` FROM `ibf_topics` WHERE forum_id = '50'
declare @chaine varchar(1000)
SET @chaine = 'title'
 
SELECT LTRIM(SUBSTRING(@chaine, CHARINDEX( ']', @chaine, 1) + 1, len(@chaine)))
 + SPACE(1)
 + LEFT(@chaine, charindex(']', @chaine))
Je suis certain que je n'ai pas précisé toutes les informations pour compléter la requête...
D'autre part n'y a t'il pas un moyen de changer directement [ par ( depuis cette requête, car la méthode que j'utilise remplacera tous les caractères... hors je souhaite ne le faire que dans un forum spécifique correspondant à la localisation suivante

Code :
SELECT `title` FROM `ibf_topics` WHERE forum_id = '50'
Sperafico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 15h25   #8
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
En combinant les réponses déja données, cela devrait vous donner quelque chose comme ca

Code :
1
2
3
4
5
6
7
8
SELECT 
   REPLACE(
   LTRIM(SUBSTRING(title, CHARINDEX( ']', title, 1) + 1, len(title)))
   + SPACE(1)
   + LEFT(title, charindex(']', title)) , '[', '(') 
FROM
   ibf_topics 
WHERE forum_id = '50'
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 15h49   #9
Invité régulier
 
Inscription : mai 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 37
Points : 6
Points : 6
Merci, j’apprécie beaucoup votre aide.

En testant ta requête Yanika_bzh, j'obtiens ce message d'erreur

#1305 - FUNCTION teamr8.CHARINDEX does not exist


Je ne sais pas pourquoi il rajoute le nom de ma base 'teamr8" devant la fonction CHARINDEX
Sperafico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 16h05   #10
Membre éclairé
 
Avatar de juvamine
 
Développeur informatique
Inscription : mai 2004
Messages : 394
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2004
Messages : 394
Points : 377
Points : 377
Dans Mysql C'est LOCATE a priori
(mon expression vient de SQLServer)
Et Len devient LENGTH

Code :
1
2
3
4
5
6
7
8
SELECT 
   REPLACE(
   LTRIM(SUBSTRING(title, LOCATE( ']', title, 1) + 1, length(title)))
   + SPACE(1)
   + LEFT(title, LOCATE(']', title)) , '[', '(') 
FROM
   ibf_topics 
WHERE forum_id = '50'
A+
juvamine
__________________
http://chat.developpez.com/ -- Salon Base de Données --
juvamine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 16h31   #11
Invité régulier
 
Inscription : mai 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 37
Points : 6
Points : 6
Merci juvamine, cette fois la requête est passée mais sans faire une seule modification, les titres ont toujours la même structure.

Curieux car la requête semblait afficher le bon nombre de sujet à modifier (environ 1630)

Affichage des enregistrements 0 - 29 (1 632 total, Traitement en 0.0009 sec.)
Sperafico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 16h34   #12
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Cette instruction est un select, pour faire une modif , utiliser UPDATE
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 16h38   #13
Membre éclairé
 
Avatar de juvamine
 
Développeur informatique
Inscription : mai 2004
Messages : 394
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2004
Messages : 394
Points : 377
Points : 377
Code :
1
2
3
4
5
6
UPDATE ibf_topics 
SET Title =   REPLACE(
   LTRIM(SUBSTRING(title, LOCATE( ']', title, 1) + 1, length(title)))
   + SPACE(1)
   + LEFT(title, LOCATE(']', title)) , '[', '(') 
WHERE forum_id = '50'
comme ça, ça devrait le faire

le select sur lequel nous travaillions jusqu'à maintenant, te permets de visualiser le résultat sans pourrir ta base pour autant ^^
Si ça te convient on passe aux choses sérieuses en transformant l'instruction en UPDATE

A+
juvamine
__________________
http://chat.developpez.com/ -- Salon Base de Données --
juvamine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 17h43   #14
Invité régulier
 
Inscription : mai 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 37
Points : 6
Points : 6
Il semble qu'il y ait encore un problème car tous les titres sont transformés en 0.

Sperafico est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 19h14   #15
Membre éclairé
 
Avatar de juvamine
 
Développeur informatique
Inscription : mai 2004
Messages : 394
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : mai 2004
Messages : 394
Points : 377
Points : 377
Faut que tu essaies de décortiquer...


Code :
1
2
3
4
5
6
SELECT 
   LTRIM(SUBSTRING(title, LOCATE( ']', title, 1) + 1, length(title))),
   LEFT(title, LOCATE(']', title))
FROM
   ibf_topics 
WHERE forum_id = '50'
Te retourne quelque chose de cohérent ??

A+
juvamine
__________________
http://chat.developpez.com/ -- Salon Base de Données --
juvamine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/09/2011, 11h36   #16
Invité régulier
 
Inscription : mai 2010
Messages : 37
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 37
Points : 6
Points : 6
Excuse moi de ma réponse tardive.

Le code fonctionne parfaitement, je vous remercie tous pour votre aide.

+
Sperafico est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h52.


 
 
 
 
Partenaires

Hébergement Web