PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 06-06-2009 21:41:04

esseker
Membre
Inscription : 06-06-2009
Messages : 1

[Sujet Clos] Chercher un mot dans une bdd avec des lettres mélangées

Bonjour,

J'ai une base de donnée comprenant des milliers de mots et je souhaite savoir si il existe une fonction me permettant d'afficher les mots se trouvant dans cette base avec des lettres données dans le désordre.

Par exemple je donne 7 lettres : PRTIMEN

Je recois comme résultat tout les mots dans la base de données avec les lettres données :


2 lettres
en, et, in, me, mi, ne, ni, pi, re, ri, te

3 lettres
epi, ipe, ire, mer, met, mie, min, mir, mit, nem, net, nie, nit, pet, pie, pin, pre, rem, rie, rit, tep, ter, tin, tip, tir, tri

4 lettres
emir, emit, item, ment, mien, mine, mire, mite, nemi, nier, niet, peri, perm, pier, pine, pire, pite, pret, prie, prit, rein, rien, rime, ripe, rite, tien, tine, tipe, tire, trie, trin, trip

5 lettres
eprit, imper, inter, menti, miner, minet, miter, mitre, nitre, peint, perit, petri, pinte, pitre, prime, remit, repit, rient, tempi, tenir, terni, tiper, trime, trine, tripe

6 lettres
mentir, meprit, mirent, permit, petrin, piment, pinter, prient, riment, ripent

7 lettres
priment



PS : Je recherche uniquement le code mysql pour pouvoir chercher tout les mots avec un tirage de lettres.

Merci d'avance
Jérémy

Hors ligne

#2 06-06-2009 21:47:03

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Sujet Clos] Chercher un mot dans une bdd avec des lettres mélangées

Saluton,
Désolé, mais SQL ne sait pas faire ça.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 07-06-2009 05:40:39

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Sujet Clos] Chercher un mot dans une bdd avec des lettres mélangées

En tout cas pas tout seul :

<?php
/* Nécessite une base MySQL esseker
comprenant une table `arrgts`
arrgt VARCHAR(7) UNIQUE.
et une table `mots`
mot VARCHAR(7) UNIQUE
PDO requiert PHP5
*/

$a=str_split('PRTIMEN');
$conn = new PDO("mysql:host=localhost;dbname=esseker","root","");
$truncate=$conn(query('TRUNCATE arrgts');
$insert=$conn->prepare('INSERT INGORE INTO arrgts VALUES (?))';
// arrgts de 2 lettres
for($i=0;$i< 8;$i++){
    for($j=0;$j<8;$j++){
        if($i<>$j){$insert->execute(array($a[$i].$a[$j]));}
        }
    }
// arrgts de 3 lettres
for($i=0;$i< 8;$i++){
    for($j=0;$j<8;$j++){
        if($i<>$j){
            for($k=0,$k<8;$k++){
                if($i<>$k> && $j<>$k){$insert->execute(array($a[$i].$a[$j].$a[$k]));}
                }
            }
        }
    }
// arrgts de 4 lettres
for($i=0;$i< 8;$i++){
    for($j=0;$j<8;$j++){
        if($i<>$j){
            for($k=0,$k<8;$k++){
                if($i<>$k> && $j<>$k){
                    for($l=0,$l<8,$l++){
                        if($l<>$i && $l<>$j && $l<>$k){
                            $insert->execute(array($a[$i].$a[$j].$a[$k].$a[$l]));
                            }
                        }
                    }
                }
            }
        }
    }
// arrgts de 5 lettres
for($i=0;$i< 8;$i++){
    for($j=0;$j<8;$j++){
        if($i<>$j){
            for($k=0,$k<8;$k++){
                if($i<>$k> && $j<>$k){
                    for($l=0,$l<8,$l++){
                        if($l<>$i && $l<>$j && $l<>$k){
                            for($m=0;$m<8;$m++){
                                if($m<>$i && $m<>$j && $m<>$k && $m<>$l){
                                    $insert->execute(array($a[$i].$a[$j].$a[$k].$a[$l].$a[$m]));
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
// arrgts de 6 lettres
for($i=0;$i< 8;$i++){
    for($j=0;$j<8;$j++){
        if($i<>$j){
            for($k=0,$k<8;$k++){
                if($i<>$k> && $j<>$k){
                    for($l=0,$l<8,$l++){
                        if($l<>$i && $l<>$j && $l<>$k){
                            for($m=0;$m<8;$m++){
                                if($m<>$i && $m<>$j && $m<>$k && $m<>$l){
                                    for($n=0,$n<8,$n++){
                                        if($n<>$i && $n<>$j && $n<> $k && $n<>$l && $n<>$m){
                                            $insert->execute(array($a[$i].$a[$j].$a[$k].$a[$l].$a[$m].$a[$n]));
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
// arrgts de 7 lettres
for($i=0;$i< 8;$i++){
    for($j=0;$j<8;$j++){
        if($i<>$j){
            for($k=0,$k<8;$k++){
                if($i<>$k> && $j<>$k){
                    for($l=0,$l<8,$l++){
                        if($l<>$i && $l<>$j && $l<>$k){
                            for($m=0;$m<8;$m++){
                                if($m<>$i && $m<>$j && $m<>$k && $m<>$l){
                                    for($n=0,$n<8,$n++){
                                        if($n<>$i && $n<>$j && $n<> $k && $n<>$l && $n<>$m){
                                            for($o=0,$o<8,$o++){
                                                if($o<>$i && $o<>$j && $o<>$k && $o<>$l && $o<>$m && $o<>$m && $o<>$n){
                                                    $insert->execute(array($a[$i].$a[$j].$a[$k].$a[$l].$a[$m].$a[$n].$a[$o]));
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
// il ne reste plus qu'à mettre les 2 tables en jointure
$result=$conn->query('SELECT mot FROM mots INNER JOIN arrgts ON mot=arrgt ODRDER BY LENGTH(mot), mot');
while($ligne=$result->fetch(PDO::FETCH_NUM)){echo $ligne[0],<'br />'

Il y a probablement moyen d'optimiser la génération des lignes de la table arrgts en utilisant une fonction récursive, mais je ne vais pas tout faire qd même.
IMPORTANT sans PDO et la requête préparée $insert, il ne vaut mieux pas y songer, le serveur MySQL va exploser.
En tout état de cause chacun voit bine les limites de ce genre d'exercice.
La table arragts devrait être bloquée en transactionnel pour éviter les accès concurrents.
Et si ce genre de manip doit intervenir avec fréquence, il vaut mieux repenser tout ça autrement
Par exemple en abandonnant la table arrgt et en utilisant PDO pour préparer la requête $result 'SELECT mot FROM mots WHERE mot=?' et en lui passant chaque arrgt comme paramètre positionnel.
Tout bien réfléchi c'est évidemment cette solution qu'il faudrait préférer.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#4 07-06-2009 08:44:26

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : [Sujet Clos] Chercher un mot dans une bdd avec des lettres mélangées

Ce qui nous donne :

<?php
/* Nécessite une base MySQL esseker
comprenant une table `mots`
mot VARCHAR(7) UNIQUE
PDO requiert PHP5
*/

function demande($valeur){
    global $result;
    $result->execute($valeur);
    $ligne=$result->fetch(FETCH_NUM);
    echo $ligne[0],<'br />';
    }
$a=str_split('PRTIMEN');
$conn = new PDO("mysql:host=localhost;dbname=esseker","root","");
$truncate=$conn(query('TRUNCATE arrgts');
$result=$conn->prepare('SELECT Mot FROM mots WHERE mot=?');
// arrgts de 2 lettres
for($i=0;$i< 8;$i++){
    for($j=0;$j<8;$j++){
        if($i<>$j){demande(array($a[$i].$a[$j]));}
        }
    }
// arrgts de 3 lettres
for($i=0;$i< 8;$i++){
    for($j=0;$j<8;$j++){
        if($i<>$j){
            for($k=0,$k<8;$k++){
                if($i<>$k> && $j<>$k){demande(array($a[$i].$a[$j].$a[$k]));}
                }
            }
        }
    }
// arrgts de 4 lettres
for($i=0;$i< 8;$i++){
    for($j=0;$j<8;$j++){
        if($i<>$j){
            for($k=0,$k<8;$k++){
                if($i<>$k> && $j<>$k){
                    for($l=0,$l<8,$l++){
                        if($l<>$i && $l<>$j && $l<>$k){
                            demande(array($a[$i].$a[$j].$a[$k].$a[$l]));
                            }
                        }
                    }
                }
            }
        }
    }
// arrgts de 5 lettres
for($i=0;$i< 8;$i++){
    for($j=0;$j<8;$j++){
        if($i<>$j){
            for($k=0,$k<8;$k++){
                if($i<>$k> && $j<>$k){
                    for($l=0,$l<8,$l++){
                        if($l<>$i && $l<>$j && $l<>$k){
                            for($m=0;$m<8;$m++){
                                if($m<>$i && $m<>$j && $m<>$k && $m<>$l){
                                    demande(array($a[$i].$a[$j].$a[$k].$a[$l].$a[$m]));
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
// arrgts de 6 lettres
for($i=0;$i< 8;$i++){
    for($j=0;$j<8;$j++){
        if($i<>$j){
            for($k=0,$k<8;$k++){
                if($i<>$k> && $j<>$k){
                    for($l=0,$l<8,$l++){
                        if($l<>$i && $l<>$j && $l<>$k){
                            for($m=0;$m<8;$m++){
                                if($m<>$i && $m<>$j && $m<>$k && $m<>$l){
                                    for($n=0,$n<8,$n++){
                                        if($n<>$i && $n<>$j && $n<> $k && $n<>$l && $n<>$m){
                                            demande(array($a[$i].$a[$j].$a[$k].$a[$l].$a[$m].$a[$n]));
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
// arrgts de 7 lettres
for($i=0;$i< 8;$i++){
    for($j=0;$j<8;$j++){
        if($i<>$j){
            for($k=0,$k<8;$k++){
                if($i<>$k> && $j<>$k){
                    for($l=0,$l<8,$l++){
                        if($l<>$i && $l<>$j && $l<>$k){
                            for($m=0;$m<8;$m++){
                                if($m<>$i && $m<>$j && $m<>$k && $m<>$l){
                                    for($n=0,$n<8,$n++){
                                        if($n<>$i && $n<>$j && $n<> $k && $n<>$l && $n<>$m){
                                            for($o=0,$o<8,$o++){
                                                if($o<>$i && $o<>$j && $o<>$k && $o<>$l && $o<>$m && $o<>$m && $o<>$n){
                                                    demande(array($a[$i].$a[$j].$a[$k].$a[$l].$a[$m].$a[$n].$a[$o]));
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
?>'

à tester, bien sûr.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 09-02-2015 05:46:33

goolmoon7
Membre
Inscription : 09-02-2015
Messages : 1

Re : [Sujet Clos] Chercher un mot dans une bdd avec des lettres mélangées

Sur le fonds, telle qu'elle est présentée là, ta requête serait bien plus rapide comme ceci select lescolonnesquivontbien
from maTable


Our excellent online braindumps - ccna pdf will lead you to success cca.edu testking exam. We also offer latest hsbc with 100% success guarantee. Our University of New Haven is rare in IT world.

Hors ligne

Pied de page des forums