IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Requête pour inverser l'ordre d'un titre de sujet (forum)


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Points : 22
    Points
    22
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    J'espère que cela t'aidera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Points : 22
    Points
    22
    Par défaut
    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".

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Quel est votre SGBD ?
    Pouvez vous poster la requete complete non fonctionnelle ?

  5. #5
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    si tu es sous Oracle, voici un sql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select replace(replace( substrb(CHAMP_CAINE, instr(CHAMP_CAINE,']')+1)||' '||substrb(CHAMP_CAINE, 1, instr(CHAMP_CAINE,']')),'[','('),']',')')
    from Ta_table

  6. #6
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    et si tu es sous MsAcces voici le code


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select replace(replace( mid(Champ1, instr(Champ1,']')+1)+" "+mid(Champ1, 1, instr(Champ1,']')),'[','('),']',')') from table1

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Points : 22
    Points
    22
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT `title` FROM `ibf_topics` WHERE forum_id = '50'

  8. #8
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    En combinant les réponses déja données, cela devrait vous donner quelque chose comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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'

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Points : 22
    Points
    22
    Par défaut
    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

  10. #10
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    Dans Mysql C'est LOCATE a priori
    (mon expression vient de SQLServer)
    Et Len devient LENGTH

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Points : 22
    Points
    22
    Par défaut
    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.)

  12. #12
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Cette instruction est un select, pour faire une modif , utiliser UPDATE

  13. #13
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Points : 22
    Points
    22
    Par défaut
    Il semble qu'il y ait encore un problème car tous les titres sont transformés en 0.


  15. #15
    Membre confirmé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Points : 502
    Points
    502
    Par défaut
    Faut que tu essaies de décortiquer...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Points : 22
    Points
    22
    Par défaut
    Excuse moi de ma réponse tardive.

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

    +

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête pour recherche inverse (ajax, kvp...) suite à un clic
    Par rgodin dans le forum IGN API Géoportail
    Réponses: 8
    Dernier message: 01/05/2015, 15h30
  2. Réponses: 2
    Dernier message: 12/09/2014, 21h31
  3. Requête pour modifier un champ 'Ordre'
    Par infosam76 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/01/2014, 00h17
  4. Réponses: 3
    Dernier message: 26/05/2010, 23h39
  5. [MySQL] Requête pour récupérer les 5 derniers enregistrement dans l'ordre croissant
    Par Jonathan.b dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/01/2008, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo