dans la table Log , j'ai la colonne GroupeAD contenant tous les groupes dont l'utilisateur fait parti , séparé par "|" ex : gg-XX|gg-xy
Erreur fatale !
On ne doit JAMAIS mettre une donnée multivaluée dans une colonne, c'est contraire à la philosophie SQL. La meilleure preuve est que tu en arrives à échafauder une usine à gaz pour résoudre un problème élémentaire.
En règle générale, si une même donnée est stockée plus d'une fois, alors on doit se poser la question de normaliser le design (sauf dénormalisation volontaire pour des questions d'efficacité, à postériori).
Pour prendre une analogie simple, regarde le répertoire d'un téléphone. Tu pourrais y trouver cette suite d'entrées :
Eric adsl 0975874152
Eric fixe home 0287652140
Eric port 0627891999
Eric port boulot 0615210248
Eric fixe boulot 0178945763
etc.
Je ne connais aucun smartphone qui présenterait ça ainsi :
Eric 0975874152,0287652140,0627891999,0615210248,0178945763
ce serait indémerdable.
Si on transpose en SQL, on va faire :
o) une table des noms avec Id et nom en clair
o) une table des types de liens (adsl, fixe home, portable, portable boulot, ...) avec Id et type en clair
o) une table des numéros avec Id, numéro, typeId, nomId
que l'on peut facilement étendre pour y stocker (avec la même sémantique) les adresses mail, fècesbouc, etc.
La magie pour ficeler tout ça de façon cohérente fait principalement appel à deux ingrédients : les clés étrangères (FK = foreign keys) entre IDs et les jointures entre tables (JOIN), utilisant le plus souvent ces IDs.
Ne le prend pas mal, je sais bien que tu débutes.
Les relations entre données [re]construisent de l'information. Des données peuvent être :
-) indépendantes (aucune relation, ex. code barre d'un article et salaire du gérant)
-) 1 à 1 (ex. numéro <--> typeId, ou 1 règlement solde 1 facture)
-) 1 à N (ex. nomId <-->> numeroId, ou 1 règlement solde plusieurs factures)
-) N à 1 (ex. inverse du précédent, ou plusieurs règlements soldent 1 facture)
-) N à N (ex. quel nomId a fait crac-crac avec quel nomId, ou plusieurs règlements disparates soldent plusieurs factures)
Tu vires cette colonne atroce d'une liste de groupes et tu crées une table UserGroups qui va contenir des paires (UserId, GroupeId) avec, bien entendu, un seul groupe par entrée. Si un user fait partie de 5 groupes, il aura 5 entrées. Pour conserver l'efficacité, on ne stocke dans cette table que les Id (rowid si tu préfères ce nom-là). Il te faut donc une table des groupes, donnant pour chaque groupeId son nom et éventuellement d'autres caractéristiques directement associées à ce groupe.
N'hésite pas à enfoncer le clou : dans ta table log, on va voir répéter les users des palanquées de fois ! Bingo, on remplace les users dans cette table par un userId et, du coup, on crée une table des users avec Id et user en clair.
Tu as : une table Users, une table Groups, une table de lien UserGroups et une table log qui devrait s'appeler PrintLog.
C'est normal et c'est BIEN. Ce qui serait encore mieux serait que tu trouves par toi-même la table qui manque à ce paysage...
Pour quiconque débute en SQL, un tel schéma semble inutilement tortueux et c'est bien là que SQL surprend le programmeur "conventionnel" : SQL excelle à retrouver ses billes dans une pléiade de tables liées entre elles par des relations sémantiques claires. Le langage offre la possibilité d'exprimer des relations et des requêtes complexes et/ou subtiles de façon concise, lisible et maintenable (SQL est le langage le plus utilisé dans le monde, et de très loin !).
Exemple de subtilité (artificiel, certes) : dans le schéma ci-dessus, ne pas effacer les groupes qui disparaissent de l'AD réel, ni les users qui en faisaient partie. Cela permet, six mois après une réorganisation (fusion, spin off, ...) de comparer les coûts d'impression avant et après et de prendre les mesures appropriées le cas échéant. Si l'appli a une quelconque vocation à durer, dissocier ainsi AD réel et image de l'AD au fil du temps a un sens. Le problème des changements de groupes et de noms est soluble, comme le Nescawa.
Dans la réalité, il y a une autre caractéristique qui est absente de la discussion ; c'est la localisation physique, variable pour les gens, bien réelle pour une imprimante mais 100% virtuelle pour un groupe AD. Je plaisante, mais le groupe 'secrétaires' est certainement réparti sur plusieurs étages, voire plusieurs bâtiments, villes ou même pays. Une secrétaire va utiliser l'imprimante A3 couleur la plus accessible quand elle a besoin d'A3 couleur. Question pertinente : quel parc d'imprimantes dois-je acheter et où dois-je les placer pour optimiser ma boîte sans frustrer mon personnel ni exploser le budget ?
Ce que je veux dire par là est qu'une appli aura d'autant plus de facilité à évoluer dans le bon sens et au moindre mal si elle est bien ficelée dès le départ et utilise à bon escient les constructions "naturelles" de la plate-forme ou du langage qu'elle emploie.
J'espère que tu vois maintenant pourquoi la recherche FTS est inadaptée à ton problème.
J'ai usé le clavier et abusé du forum ... AutoIt. Aaah non, j'ai trouvé comment me faire pardonner :
Exit(0)