1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2017
    Messages : 9
    Points : 5
    Points
    5

    Par défaut Comparaison des valeurs d'une colonne de type String ( chaînes de caractères très longues)

    Bonsoir tout le monde,

    J'ai une table "Origine" qui contient une colonne "Title" ( des titres des articles )
    je dois remplir une autre colonne "Title" de la table "Article" par les titres des articles de la table "Origine" tout en évitant les doublons.

    est-ce qu'il y a une fonction qui permet de comparer des chaînes de caractères très longues?

    la table "Origine" contient 23000 lignes avec doublons (il y a des titres redondant) si j'arrive à éliminer les doublons j'obtiendrai 3600 lignes.

    Merci d'avance.

  2. #2
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 2 889
    Points : 6 315
    Points
    6 315
    Billets dans le blog
    1

    Par défaut

    Bonjour,

    Techniquement c'est très simple : utilisation de la clause DISTINCT

    Cela étant, dé doublonner sur des titres est plus délicat que ça, si je prend l'exemple du cinéma ou de la littérature, il existe des doublons justifiés et à conserver, quand le même titre est utilisé plusieurs fois, mais que l'auteur et/ou la date de sortie sont différents.
    Cas d'espèce : "la guerre des boutons" qui est d'une part le roman de Louis Pergaud, et d'autre part 2 films de cinéma, réalisés l'un par Yves Robert et l'autre par Yann Samuell
    Attention donc à ne pas éliminer à tort certains titres...

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2017
    Messages : 9
    Points : 5
    Points
    5

    Par défaut

    Bonjour,

    Merci pour votre réponse

    Les titres sont des titres des articles de recherche scientifique ils sont très très longs

    Pour éclaircir je vous donne des exemples de titres :

    - Effects of extruded diets with different energy levels on body composition of fat content in different parts of dorsal, ventral of fillet of rainbow trout (Oncorhynchus mykiss)

    - Genetic Variation in the Interleukin-28B Gene Is Associated with Spontaneous Clearance and Progression of Hepatitis C Virus in Moroccan Patients

    -Surgical treatment of secondary hyperparathyroidism in chronic renal failure. Report of 57 cases [Traitement chirurgical de l'hyperparathyroidie secondaire des insuffisants renaux: A propos de 57 cas]

    Est-ce que la clause DISTINCT sera efficace pour comparer dans ce cas car, de un, comparer 2 titres de cette longueur est très gourmand en terme de temps et mémoire, de deux, ma table contient 23000 titres d'articles

    Merci beaucoup

  4. #4
    Expert éminent

    Homme Profil pro
    bourreau
    Inscrit en
    mars 2010
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : mars 2010
    Messages : 2 889
    Points : 6 315
    Points
    6 315
    Billets dans le blog
    1

    Par défaut

    Quoi qu'il en soit, comparer des chaines de caractères pour dédoublonner est coûteux et peu fiable, même si au vu des exemples que vous donnez, les risques de faux doublons sont rares, il y probablement des cas de titres identiques (certainement des titres plus courts) mais dont les auteurs sont différents.
    N'y a -t- il pas un identifiant unique qui permettrait de faire une jointure entre les 2 tables ? Sinon, ne pouvez vous pas l'ajouter ou le faire ajouter ?
    Quelle est la description de chacune de ces tables ?

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2017
    Messages : 9
    Points : 5
    Points
    5

    Par défaut

    Voilà la table "Original" :

    Nom : 2.PNG
Affichages : 25
Taille : 10,2 Ko

    Et la table "Article":

    Nom : 3.PNG
Affichages : 24
Taille : 6,7 Ko

    il y a des doublons dans la colonne "Title" parce que plusieurs auteurs contribuent à la rédaction d'un seul article
    pour remplir la table "Article", MySQL doit à chaque fois comparer le titre de l'article qu'il va faire entrer dans la table "Article" ( depuis la table "Original" ) avec tout les titres des autres articles de la table "Article" ( cette dernière est vide pour le moment, mais supposons qu'il arrive au titre numéro 2000 c'est déjà très coûteux en terme de temps de le comparer avec les 2000 articles )

    Merci

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2017
    Messages : 9
    Points : 5
    Points
    5

    Par défaut

    je peux changer la structure des tables si cela est nécessaire pour obtenir le résultat souhaité, y a pas de soucis

  7. #7
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 2 791
    Points : 8 342
    Points
    8 342

    Par défaut

    Salut AfafAr7.

    Pourquoi faire une comparaison de titre ("title") ?

    D'une part avec votre méthode, vous ne savez pas distinguer un "titre" écrit par tel auteur et le même "titre" écrit par d'autrres auteurs.
    Et d'autre part, ce qu'il vous manque, c'est de définir la relation qu'il y a entre la table "article" et la table "original".
    Autrement dit, vous devez créer une clef étrangère entre vos deux tables.
    En gros, vous remplacez la colonne "title" de la table "article" par la clef étrangère "original_fk" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    `original_fk` integer  NULL,
    CONSTRAINT `FK_ORIGINAL` FOREIGN KEY (`original_fk`) REFERENCES `original` (`id_org`) ON DELETE CASCADE ON UPDATE CASCADE
    Pour le remplissage de cette colonne, vous devez faire un traitement qui va mettre en relation les deux colonnes "title".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    alter table `article` add `original_fk` integer NULL;
     
    update      `article`  as t1
    inner join  `original` as t2
            on  t2.title = t1.title
     
           set  t1.original_fk = t2.id_org;
     
    alter table `article` add foreign key (`FK_ORIGINAL`) references `original` (`id_org`) ON DELETE CASCADE ON UPDATE CASCADE;
    Ensuite, vous devez vérifier si tous vos "original_fk" ont bien été renseignés.
    Si c'est le cas, alors vous pouvez détruire la colonne "title".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alter table `article` drop column `title`;
    Si ce n'est pas le cas, alors cherchez pourquoi vous n'avez pas la correspondance.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  8. #8
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juillet 2017
    Messages : 9
    Points : 5
    Points
    5

    Par défaut

    Bonjour

    Merci pour votre réponse, j'ai juste une petite question :
    si j'ai bien compris à la ligne t1.title = t2.title on va comparer les titres, mais est ce que ça ne va pas prendre beaucoup de temps parce qu'il y a énormément de lignes dans les deux tables et puis les titres sont très longs?

  9. #9
    Expert éminent Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    février 2011
    Messages
    2 791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : février 2011
    Messages : 2 791
    Points : 8 342
    Points
    8 342

    Par défaut

    Salut AfafAr.

    Citation Envoyé par AfafAr
    est ce que ça ne va pas prendre beaucoup de temps parce qu'il y a énormément de lignes dans les deux tables et puis les titres sont très longs?
    Oui, cela risque de prendre du temps, mais comme vous avez une erreur de modélisation, cela va la corriger.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/02/2011, 00h53
  2. insertion des valeurs dans une colonne
    Par freestyler1982 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/01/2007, 16h38
  3. Maximum des valeurs d'une colonne
    Par cjacquel dans le forum Access
    Réponses: 1
    Dernier message: 19/01/2007, 17h25
  4. Réponses: 2
    Dernier message: 11/07/2006, 12h02
  5. quote dans des valeurs d'une colonne SET
    Par Jean Fi dans le forum Requêtes
    Réponses: 6
    Dernier message: 30/03/2006, 20h16

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