Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


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.
#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 ?
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#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..
#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]

irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#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...
#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 \"', '\"]')"]

irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away
#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...
#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.
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
Away


Possibly Related Threads…
Thread Author Replies Views Last Post
Big Grin demande d'aide pour codage KeeViiNou 4 4,601 04/07/2016, 07:55
Last Post: CrazyCat
  aide codage - spy.tcl Behemoth 3 4,170 28/04/2009, 16:13
Last Post: Behemoth

Forum Jump:


Users browsing this thread: 1 Guest(s)