1. ⭐⭐⭐ Grosse PROMO en cours sur ma plateforme SEO My Ranking Metrics
    Rejeter la notice

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:
    734
    J'aime reçus:
    75
  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 182
    J'aime reçus:
    141
    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 occasionnel
    Inscrit:
    10 Septembre 2006
    Messages:
    481
    J'aime reçus:
    53
    @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 808
    J'aime reçus:
    242
    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:
    584
    J'aime reçus:
    35
    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 808
    J'aime reçus:
    242
    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
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
Comment ce spam en recherche locale est-il possible ? Netlinking, backlinks, liens et redirections 9 Octobre 2019
Nouvelle présentatation des résultats du moteur de recherche google Référencement Google 5 Octobre 2019
Référencement local : comment apparaître sur une recherche Google YouTube, Google Images et Google Maps 28 Septembre 2019
Etre dans le top 3 des résultats de recherche seulement avec une stratégie de contenu ? Référencement Google 17 Septembre 2019
Différence % Site search et % sessions de recherche Techniques avancées de référencement 13 Septembre 2019
CTR en matière de recherches d'images YouTube, Google Images et Google Maps 12 Septembre 2019
50% des recherches sur Google n'aboutissent pas à un clic Référencement Google 20 Août 2019
Pourquoi mon patron me protège-t-il à propos de la recherche par mot clé? Demandes d'avis et de conseils sur vos sites 20 Juillet 2019
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice