recherche lettres dans mysql

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par chava2b, 11 Juillet 2019.

  1. chava2b
    chava2b WRInaute occasionnel
    Inscrit:
    5 Décembre 2003
    Messages:
    289
    J'aime reçus:
    1
    Salut,

    je cherche à faire une requete MySQL et je rame un peu

    j'ai une table dico (id;mot) avec plein de mots bien orthographiés

    ex:
    Je veux récupérer le mot "SOLEIL" si j'envoi les lettres dans le désordre. "OSLEIL" par ex. Je veux donc tous les résultats qui ont le meme nombre de lettre et les meme lettres

    Quelqu'un peux m'aider ?

    Merci?
     
  2. chava2b
    chava2b WRInaute occasionnel
    Inscrit:
    5 Décembre 2003
    Messages:
    289
    J'aime reçus:
    1
    Autre exemple :

    avec les lettres "amison" je veux les résultats : "aimons" et "maison"
     
  3. ABCWEB
    ABCWEB WRInaute impliqué
    Inscrit:
    22 Octobre 2015
    Messages:
    799
    J'aime reçus:
    87
  4. chava2b
    chava2b WRInaute occasionnel
    Inscrit:
    5 Décembre 2003
    Messages:
    289
    J'aime reçus:
    1
    Merci abcweb, ca me semble lourd comme soluce.
    Je continue de chercher avec du rlike je pense que ca doit etre possible….
     
  5. rick38
    rick38 WRInaute passionné
    Inscrit:
    23 Février 2013
    Messages:
    1 291
    J'aime reçus:
    162
    Moi je ferais un bout en PHP pour construire la requête avec un IN( ) listant toutes les possibilités. La requête n'est pas lancée à partir d'un langage comme PHP ?
     
  6. Nico998
    Nico998 Nouveau WRInaute
    Inscrit:
    4 Avril 2013
    Messages:
    23
    J'aime reçus:
    4
    Moi j'ajouterais une colonne supplémentaire motTrié à la table dico qui contiendrait toutes les lettres du mot triées par ordre alphabétique. Pour rester sur l'exemple donné, ça reviendrait à :
    Code:
    1:MAISON:AIMNOS
    2:AIMONS:AIMNOS
    Cette colonne est à initialiser en batch lors du chargement de la table dico ou de l'ajout de nouveaux mots.

    Pour l'utiliser, il faut préalablement retravailler la chaine à rechercher pour trier les lettres par ordre alphabétique et lancer la requête sur la nouvelle colonne motTrié. On a ainsi tous facilement tous les mots qui correspondent à l'anagramme sans avoir à écrire des requêtes trop complexes
     
    #6 Nico998, 11 Juillet 2019
    Dernière édition: 12 Juillet 2019
    UsagiYojimbo et colonies aiment ça.
  7. chava2b
    chava2b WRInaute occasionnel
    Inscrit:
    5 Décembre 2003
    Messages:
    289
    J'aime reçus:
    1
    @rick38, oui je suis en php

    Je débute vraiment avec les expression régulière mais quand je fais ca, ca fonctionne presque :

    Avec les lettres dur mot "soleil". par contre "[L]{2}" me limite qu'aux mots qui ont 2 'L' consécutifs alors qu'il me faudrait 2 'L' m'importe où dans le mot. Une idée ?

    Code:
    SELECT * FROM table where  LENGTH(mot)=6 AND mot rlike "[S]{1}" and mot rlike "[O]{1}" and mot rlike "[L]{2}" and mot rlike "[E]{1}" and mot rlike "[I]{1}"
    

    Merci
     
  8. colonies
    colonies WRInaute impliqué
    Inscrit:
    10 Septembre 2006
    Messages:
    506
    J'aime reçus:
    58
    @chava2b Nico998 t'a donné "la" bonne solution.
    Mais si tu insistes pour faire un système bidouillesque et peu performant :
    SELECT *
    FROM table
    WHERE LENGTH(mot)=6
    AND mot LIKE "%S%"
    AND mot LIKE "%O%"
    AND mot LIKE "%L%L%"
    AND mot LIKE "%E%"
    AND mot LIKE "%I%"

    Si tu as beaucoup de données, ça va être l'enfer car MySQL ne peut pas utiliser d'indexe. Alors que si tu prépares un champ avec les lettres en ordre alphabétique, en minuscules, sans accents (si tu ne veux pas distinguer un é d'un e), tu peux avoir un champ indexé, et MySQL pourra sélectionner instantanément ce que tu souhaites trouver.
     
    Nico998 apprécie ceci.
  9. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 882
    J'aime reçus:
    263
    Code:
    SELECT * FROM dico WHERE mot REGEXP 'S|O|L|E|I|L' AND LENGTH(mot) = LENGTH('SOLEIL')
     
  10. zikeur54
    zikeur54 WRInaute impliqué
    Inscrit:
    15 Juin 2010
    Messages:
    602
    J'aime reçus:
    38
    Dans le passé, dans un tuto il existait un script tout fait que j'avais copié et que je trouvais extraordinaire sur le site de dévellopez.net. Un jour, il n'a plus fonctionné. Je ne sais pas comment faire pour retrouver ce lien qui date de plusieurs années, on ne sait pas combien de temps reste archivés les cours et tutoriaux sur le site.
    Ce " professeur" en informatique avait réalisé pour les cruciverbistes tous les mots possibles avec des lettres commençant par 2 puis 3 puis 4, ainsi de suite.
     
  11. Nico998
    Nico998 Nouveau WRInaute
    Inscrit:
    4 Avril 2013
    Messages:
    23
    J'aime reçus:
    4
    Malheureusement non, ça ne marchera pas. Tous les mots de 6 lettres ayant un S ou O ou L ou E ou I sont affichés. On retrouvera aussi bien des mots comme MOBILE ou POSTER

    Le précalcul des lettres triées simplifie énormément l'algorithme de recherche et facilite le travail à la base de données donc son temps de réponse surtout en utilisant un index comme l'indique @colonies . Cette solution ne présente que des avantages
     
  12. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 882
    J'aime reçus:
    263
    J'avais mal compris mais c'est faisable avec un REGEX aussi.
     
  13. chava2b
    chava2b WRInaute occasionnel
    Inscrit:
    5 Décembre 2003
    Messages:
    289
    J'aime reçus:
    1
    Merci pour vos réponses ;)

    colonies, le like consomme plus de temps que le rlike. Le dico est fixe, donc j'ai indexé tous les mots. Mon dédié semble tenir le coup. D'ici peu, je mettrai la solution de nico998 car elle semble la plus efficace


    Voici ce que j'ai fait pour le moment par exemple avec le mot "SOLEIL" :

    Code:
    SELECT mot FROM dico WHERE mot RLIKE "[S]{1}" AND mot RLIKE "[O]{1}" AND mot RLIKE "[L]{1}.*[L]{1}" AND mot RLIKE "[E]{1}" AND mot RLIKE "[I]{1}"
    
     
Chargement...
Similar Threads - recherche lettres mysql Forum Date
recherche aléatoire des bots ?! Référencement Google 14 Janvier 2020
Encart "Rechercher des résultats sur" Référencement Google 10 Janvier 2020
SEO: Taper le nom de domaine dans la recherche google Référencement Google 6 Janvier 2020
Mon site web n'est plus référencé sur les moteurs de recherche sauf Google Problèmes de référencement spécifiques à vos sites 17 Décembre 2019
Cache schema.org, SearchAction et recherche sur Chrome ? Référencement Google 10 Décembre 2019
Recherche sites pénalisés par penguin Netlinking, backlinks, liens et redirections 2 Décembre 2019
La recherche vocale ne se résume pas aux assistants vocaux ! Référencement Google 27 Novembre 2019
Mais où sont passés les vrais résultats de recherche ? Référencement Google 24 Novembre 2019
Désindexer page du moteur de recherche interne Crawl et indexation Google, sitemaps 30 Octobre 2019
Aucune information relative à la page dans les résultats de recherche Demandes d'avis et de conseils sur vos sites 11 Octobre 2019
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice