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 :

Anagramme avec wildcards


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Anagramme avec wildcards
    Bonjour,

    Je possède une base de donnée de mots de la langue française (dictionnaire ods 4 et 5), celle du scrabble.

    Je suis occupé de créer un petit script qui pourrait me retourner les résultats possibles selon un tirage de lettres aléatoire.

    Un exemple et vous comprendrez très vite:

    Je tire les lettres: brear

    Les solutions possibles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #	Mot	Score	Taille
    1	ARBRE	7	5
    2	BARRE	7	5
    3	ABER	6	4
    4	RABE	6	4
    5	ERRA	4	4
    6	RARE	4	4
    7	BAR	5	3
    8	BEA	5	3
    9	BER	5	3
    10	RAB	5	3
    11	ARE	3	3
    12	REA	3	3
    13	BA	4	2
    14	BE	4	2
    15	RA	2	2
    16	RE	2	2
    Le script génère ce SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT DISTINCT word, CHAR_LENGTH( word ) AS length, score
    FROM words
    WHERE (
    CHAR_LENGTH( word ) <=5
    AND word NOT
    REGEXP 'C|D|F|G|H|I|J|K|L|M|N|O|P|Q|S|T|U|V|W|X|Y|Z'
    ) AND (
    word NOT LIKE '%B%B%'
    AND word NOT LIKE '%A%A%'
    AND word NOT LIKE '%E%E%'
    AND word NOT LIKE '%R%R%R%'
    La colonne score a été ajoutée par moi même et contient le score du mot au scrabble.

    C'est en fait, très simple, je procède par élimination de toutes les autres lettres de l'alphabet(les NOT REGEXP) et vérifie que je ne possède pas plus de lettres que prévu (les NOT LIKE).

    On peut réduire tout cela en une seule ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT DISTINCT word, CHAR_LENGTH( word ) AS length, score
    FROM words
    WHERE (
    CHAR_LENGTH( word ) <=5
    AND word NOT REGEXP 'C|D|F|G|H|I|J|K|L|M|N|O|P|Q|S|T|U|V|W|X|Y|Z|.*A.*A.*|.*A.*A.*|.*R.*R.*R.*|.*E.*E.*'
    )
    Je n'ai pas trouvé plus rapide pour trouver ces solutions, est ce que qqun à une autre idée ?! Y a t'il moyen d'optimiser cela ?

    Aussi, ma principale question est:, Comment créer une requête lorsqu'il y a une wildcard ?

    Par exemple, je veux trouver tous les mots avec ces lettres: brear + 1 lettre au hasard.

    Je continue à chercher mais les seules solutions valables nécessitent un traitement post SQL via un script afin de vérifier la validité des mots trouvés.
    Pensez vous que c'est faisable avec 1 seule query SQL ?

    Merci à vous

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 789
    Points
    30 789
    Par défaut
    Quand on s'attaque à une requête comportant une liste de valeurs, il faut toujours se souvenir que le SQL est conçu pour gérer des tables.
    Essaye de repenser ta requête en transformant ta liste des lettres tirées en une table comportant ces lettres...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !

    On peut éventuellement profiter du fait que le nombre de possibilités sont restreintes pour toutes les lister.

    En gros, toutes les combinaisons (arrangements en fait) à 1 lettre, 2, ...

    Pour 7 lettres, ça donne 7! (factorielle). La somme te donne 5907 possibilité
    1! + 2! + 3! + ... + 7!

    Si tu places un indexe sur mot, ça te fait donc 5907 lectures d'index...

    Pour générer toutes les possibilités, y'a plein de moyens.
    En SQL par exemple, tu peux attribuer un numéro à chacune de tes lettres, générer les numéros de 1 à 1! + ... + nbLettres !, décomposer chaque nombre en base nbLettres, et remplacer par la lettre correspondante...

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/01/2011, 23h35
  2. Réponses: 2
    Dernier message: 20/08/2009, 00h58
  3. Sélection d'éléments avec wildcards
    Par Invité dans le forum Langage SQL
    Réponses: 6
    Dernier message: 05/06/2008, 16h12
  4. tests sur l'existence de fichier avec wildcards
    Par kheper dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 16/08/2007, 18h55
  5. DeleteFolder avec Wildcard - ne fonctionne pas ?
    Par chapeau_melon dans le forum VBScript
    Réponses: 1
    Dernier message: 12/07/2007, 20h22

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