Aide au codage
#1
Bonjour à tous,

Alors voila mon problème:

j'ai une liste annoncée de 5 mots.
J'ai une base de donnée avec un tableau de 3 colonnes id, in et out.

je souhaiterai comparer ma liste de 5 mot avec ce qu'il y a dans ma bdd.

mais je n'y arrive pas.

Pouvez vous m'aider en me donnant une direction à suivre (ou un code dont je pourrai m'inspirer déjà existant)

Merci à vous.
Répondre Avertir
#2
Ta base est MySQL ou sqlite ?
Comment et pourquoi veux tu comparer ta liste à ta base, et quels champs de ta base contiennent les mots ?
Répondre
#3
Hello,
Alors ma base est MySQL.
les champs de ma base qui contiennent les mots sont in et out.
je cherche à classer des genres de séries et les mettre dans la bonne rubrique par exemple.
je précise que j’accède très bien à ma base.

je pensais à quelque chose du genre:

TCL
set genre [lindex [split $arg] 1] 
# on récupère le ou les mots
set in_genre [lindex [split $genre "./_"]] 
# au cas ou il y aurai plusieurs genre avec ces ponctuations
set sql_genre [mysqlsel $mysql(HANDLE) "SELECT `in`, `out` FROM genres WHERE `in` LIKE '$in_genre' AND `out` LIKE '$in_genre'" -flatlist]
# prendre tout ce qui est dans la base que ce soit in ou alors out
foreach {in out} $sql_genre {
if {$sql_genre != "" && $in == $out} {
set add_genre [join [mysqlsel $mysql(HANDLE) "SELECT `out` FROM genres WHERE `out` = '$in_genre' LIMIT 1" -flatlist] "/"]
# au cas ou il y aurait plusieurs genre qui corespondent alors les affichenr sous cette forme : genre1/genre2/genre3
mysqlclose $mysql(HANDLE);
return 0;
}
if {$sql_genre != "" && $in != $out} {
set add_genre [mysqlsel $mysql(HANDLE) "SELECT `out` FROM genres WHERE `in` = '$genre' LIMIT 1" -flatlist]
mysqlclose $mysql(HANDLE);
return 0;
} 
if {$sql_genre == ""} {
mysqlclose $mysql(HANDLE);
return 0;
}



Voila j’espère être un peu clair ^^ mais ce que je n'arrive pas à faire c'est: des mots reçu une liste, et transformer en liste les mots dans la base et ensuite les comparer pour faire un "rapport" dans lequel je veux que ça soit au final classer ^^

merci de votre aide

Bien à vous,

Nos..
Répondre Avertir
#4
Je ne comprends pas tout à fait ce que tu veux faire, ce n'est vraiment pas clair.
Quoi qu'il en soit:
- tu reçois une liste de mots qui est dans $args
- tu veux chercher dans ta base les enregistrements dont "out" ou "in" contiennent ces mots
Ta création de $in_genre me semble bonne, il te suffit de rendre ta requête plus adaptée:
TCL
set sql_genre [mysqlsel $mysql(HANDLE) "SELECT `in`, `out` FROM genres WHERE `in` in ('[join $in_genre "', ']') AND `out` in ('[join $in_genre "', '"]')" -flatlist]


Répondre
#5
Bonjour,

Ce que je cherche à faire, imaginons que j'ai les mot horreur_drame_policier, je souhaiterai déjà les mettre en liste:

horreur
drame
policier

Après vérifier dans les mots de la base si il trouve ces mots un par un en les comparant.
Si il les trouve alors il me renvois ça sous cette forme: horreur/drame/policier
Si il les trouve, mais que les mots sont dans 'in' et pas dans 'out' alors il me renvoie celle qui sont dans 'out'.
Bien sur si il ne les trouve pas ou qu'un des mots n'est pas trouver qu'il me renvoie rien et me dit quel mot il n'a pas trouvé.

j’espère avoir été plus clair ^^

Bien à vous,

Nos...
Répondre Avertir
#6
En fait, si je comprends bien, ta table genre contient des synonymes de genres, dans la colonne "in" tu as un peu de tout et dans la colonne "out", tu as le genre propre que tu veux afficher.
Si la colonne "out" est remplie, c'est que le contenu de "in" n'est pas la valeur normalisée.

Si c'est bien ça, je pense que tu as une petite erreur de conception: pourquoi ne pas toujours remplir "out", même si sa valeur est identique à celle de "in" ?
Et du coup tu peux t'en sortir avec une seule requête:
TCL
set sql_genre [mysqlsel $mysql(HANDLE) "SELECT DISTINCT `out` FROM `genres` where `in` in ('[join $in_genre \"', '\"]')"]


Répondre
#7
oui tu as tout à fait compris comment était former ma base, c'est exactement ça dans 'in' et 'out'

j'ai déjà essayer comme ça, mais si $arg est: horreur_drame_policier alors il ne trouve pas, même si je split "_", et du coup, ça ne renvoie pas le résultat comme je le veux sous cette forme: horreur/drame/policier, car je pense qu'il ne compare pas chaque mot.

je pense à faire des boucle "while" ou "for"... de toute manière je continue à chercher et je regarde en même temps les bout de code que je vois sur le site des fois que je puisse récupérer certaine formule ^^ et sur google aussi ^^

Nos...
Répondre Avertir
#8
TCL
set text [lindex $args 1]
set words [join [split $text "./_"] "', '"]
set sql_genre [mysqlsel $mysql(HANDLE) "SELECT DISTINCT `out` FROM `genres` where `in` in ('$words')"]



Par contre, permets-moi de te dire que nommer tes colonnes avec des mots-clés de MySQL (et de SQL en général) est une très mauvaise idée. Tu devrais renommer out et in pour ne pas avoir à utiliser `qui est une aberration de MySQL et ne devrait jamais apparaitre dans une requête propre.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté