Accueil > Forum > > > > Recherche sur la branche d'un thesaurus hiérachique
Recherche sur la branche d'un thesaurus hiérachique
jeudi 30 mars 2006 à 19:09:45 |
Recherche sur la branche d'un thesaurus hiérachique

oceanrider
|
Bonjour, N'ayant une fois de plus pas pu trouver de réponse, je vous fais part de mon problème : Je dispose d'une vidéothèque dans lesquels sont répertoriés mes films ainsi que ceux de mes amis. Chaque film peut être classé selon une liste d'autorité hiérarchisée. ex. : 1 0 film 2 1 horreur, fantastique, SF 3 2 science-fiction 4 2 fantastique 5 2 horreur 6 1 western 7 6 spaghettis 8 6 classiques 9 6 crépusculaires Tout mon problème est de réussir à effectuer une recherche sur une branche entière (ex. : western) sans pour autant multiplier les requêtes (1 requête sur western puis 1 sur spaghettis, 1 sur classiques, etc.). Pour l'instant, mon idée était en reprenant le code de Titatou ( http://www.phpcs.com/codes/ARBORESCENCE-RECURSIVE_30776.aspx) sur la construction d'un arbre récursif, non pas d'"afficher" la liste des catégories, mais de placer chaque valeur de cette liste dans un tableau ou dans une chaîne, afin de placer ce résultat dans une requête du type : "SELECT titre,réal,année FROM Films,Categories WHERE idCat=XidCat AND ($critere);"en remplaçant $critere par "idCategorie=6 OR idCategorie=7 OR idCategorie=8 OR idCategorie=9"
Voici ce que j'ai tenté (sans succès) jusqu'à présent : function recur($tab,$pere) { //ballayage du tableau for ($x=0;$x<count($tab);$x++) { //si un élément a pour père : $pere if ($tab[$x][1]==$pere) { //on stocke la valeur dans un tableau $liste[]=$tab[$x][0]; //et on recherche ses fils recur($tab,$tab[$x][0]); } } }
$reqCategories="SELECT idCategorie,idGenerique,categorie FROM Categories"; $resCategories=mysql_query($reqCategories) or die("Une erreur est survenue dans l'éxécution de la requête reqCategories !"); while($ligne=mysql_fetch_array($resCategories,MYSQL_ASSOC)) { extract($ligne); $data[] = array($idCategorie,$idGenerique); } $liste=recur($data,$formIdCat);
Le problème, c'est que je n'obtiens absolument rien. Peut avez-vous une suggestion, peut être une toute autre méthode qui conviendrait mieux.
Merci d'avance.
|
|
jeudi 30 mars 2006 à 19:50:03 |
Re : Recherche sur la branche d'un thesaurus hiérachique

coucou747
|
Salut, function recur($tab,$pere) { //ballayage du tableau for ($x=0;$x<count($tab);$x++) { //si un élément a pour père : $pere if ($tab[$x][1]==$pere) { //on stocke la valeur dans un tableau $liste[]=$tab[$x][0]; //et on recherche ses fils recur($tab,$tab[$x][0]); } }
//Ta fonction ne renvoi rien, alors évidement...
du coup, liste ne contient rien... utilise soit un & devant les
arguments, soit un return à la fin de ta fonction }
$reqCategories="SELECT idCategorie,idGenerique,categorie FROM Categories"; $resCategories=mysql_query($reqCategories) or die("Une erreur est survenue dans l'éxécution de la requête reqCategories !".mysql_error()); while($ligne=mysql_fetch_array($resCategories,MYSQL_ASSOC)) { $data[] = array($ligne['idCategorie'],$ligne['idGenerique']); } $liste=recur($data,$formIdCat);
In a dream, I saw me, drop dead... U was there, U cried... It was just a dream, if I die, U won't cry, maybe, U'll be happy Mon site (articles sur la programmation et programmes)
|
|
jeudi 30 mars 2006 à 20:04:25 |
Re : Recherche sur la branche d'un thesaurus hiérachique

malalam
|
Hello,
je pige pas là...c'est moi, où tu te complqiues gravement la vie ? Si 1 film appartient à 1 catégorie :
FILMS film_id film_nom cat_id ...
CATEGORIES cat_id cat_libelle cat_id_mere
requête avec tes catégories, on cherche sur western, cat_id = 6
SELECT
film.film_nom FROM films film, categories cat WHERE cat.cat_id = film.cat_id AND (cat.cat_id = 6 OR cat.cat_id_mere = 6)
Si un
film peut avoir plusieurs catégories, c'est pareil, mais avec en plus
une table intérmédiaire de correspondance entre films et catégories.
|
|
vendredi 31 mars 2006 à 00:50:05 |
Re : Recherche sur la branche d'un thesaurus hiérachique

oceanrider
|
En réponse à Malalam, effectivement, mais cela limite la recherche à deux niveaux : ainsi si je recherche tous les films (cat_id=1), je récupère ce qui correspond à "films", "western" et "horreur, SF, fantastique", mais pas ce qui a été classé dans "science-fiction", "fantastique", "horreur", "spaghetti", etc. En outre, ma hiérarchie peut être plus profonde que dans l'exemple que j'ai donné ici et va jusqu'à 5 niveaux. Sauf erreur de ma part, je suis donc bien obligé de procéder à une boucle récursive afin d'explorer les sous-niveaux.
Et pour ce qui est de la remarque sur le trés visible mysql_error(), il est effectivement plus sage de l'ajouter (mais pas indispensable).
En tous les cas, voici le code fonctionnel que j'obtiens finalement :
function recur($tab,$pere) { $liste=array(); //balayage du tableau for ($x=0;$x<count($tab);$x++) { //si un élément a pour père : $pere if ($tab[$x][1]==$pere) { //on stocke la valeur dans un tableau $liste[]=$tab[$x][0]; //et on recherche ses fils recur($tab,$tab[$x][0]); } } //on renvoie la valeur return $liste; }
//recherche de toutes les catégories, leur ID et leur générique $reqCategories="SELECT idCategorie,idGenerique,categorie FROM Categories"; $resCategories=mysql_query($reqCategories) or die("Une erreur est survenue dans l'éxécution de la requête reqCategories !"); while($ligne=mysql_fetch_array($resCategories,MYSQL_ASSOC)) { extract($ligne); //construction du tableau contenant toutes les catégories $data[] = array($idCategorie,$idGenerique); } $liste=recur($data,$formIdCat); //la fonction ne renvoie pas la catégorie séléctionnée, on l'intègre donc dans la valeur appelée plus tard comme critère de recherche if($liste!="") { $critere=$formIdCat.' OR idCategorie='.implode($liste,' OR idCategorie='); } else { $critere=$formIdCat; }
//requête finale recherchant les films de la catégorie ou des catégories filles $reqRechSimp="SELECT idDoc,titre,titreOrig,annee,categorie FROM Documents,Categories WHERE X_idCategorie=idCategorie AND (idCategorie=$critere) ORDER BY $ordre LIMIT $limitDeb,$tailleGroupe"; $result=mysql_query($reqRechSimp) or die("Une erreur est survenue dans l'éxécution de la requête reqRechSimpCat ! ".mysql_error());
Voici la requête obtenue : SELECT
idDoc,titre,titreOrig,annee,categorie FROM Documents,Categories WHERE
X_idCategorie=idCategorie AND (idCategorie=2 OR idCategorie=3 OR idCategorie=4 OR idCategorie=5) ORDER BY titre
LIMIT 0,20
Merci à tous pour vos contributions, en espérant que mes propres déboires pourront en aider certains.
|
|
dimanche 3 septembre 2006 à 21:58:18 |
Re : Recherche sur la branche d'un thesaurus hiérachique

oceanrider
|
Petite mise à jour : en fait, je viens de m'apercevoir que cette fonction n'est pas pleinement opérationnelle. En effet, avec le return cette fonction ne parvient pas à renvoyer les Id au dela du deuxième niveau de la hiérarchie (elle trouve les spécifiques du terme recherché, mais pas les spécifiques des spécifiques). Aussi je l'ai modifiée de façon à ce qu'elle soit pleinement opérationnelle en remplaçant le return par un passage des arguments par référence.
function recur($tab,$pere,&$valeurs) { //balayage du tableau for ($x=0;$x<count($tab);$x++) { //si un élément a pour père : $pere if ($tab[$x][1]==$pere) { //on stocke la valeur dans un tableau $valeurs[]=$tab[$x][0]; //et on recherche ses fils recur($tab,$tab[$x][0],&$valeurs); } } }
//recherche de toutes les catégories, leur ID et leur générique $reqCategories="SELECT idCategorie,idGenerique,categorie FROM Categories"; $resCategories=mysql_query($reqCategories) or die("Une erreur est survenue dans l'éxécution de la requête reqCategories !".mysql_error());; while($ligne=mysql_fetch_array($resCategories,MYSQL_ASSOC)) { //construction du tableau contenant toutes les catégories $data[] = array($ligne['idCategorie'],$ligne['idGenerique']); } recur($data,$formIdCat,$liste);
Ainsi, $liste est exploitable et contient cette fois tous les termes spécifiques à celui recherché.
|
|
Cette discussion est classée dans : recherche, liste, tab, branche, idcategorie
Répondre à ce message
Sujets en rapport avec ce message
définir la catégorie de recherche [ par helvetdulac ]
Bonjour à tous, nouveau et néophite, j'ai déjà un problème pour définir l'énoncé pour la recherche.je voudrais, à l'aide dun clic sur un bouton, ajout
recherche dans une table [ par 01cod10 ]
J'aimerai afficher la liste de tous les membres ayant comme sexe femme dont l'age est compris entre 30 et 35 et une photo je sais que je dois utilise
Recherche dans une table avec un ou plusieurs critères [ par murrigane ]
Bonjour, J'essais de créer d'après un formulaire, une recherche sur un ou plusieurs critères : Le champ 1 est une liste déroulante, le champ 2 c'est d
proble de liste deroulante [ par nacer_1954 ]
j'ai un formulaire ou il ya une liste deroulante pour effectuer des recherches. quand on fait precedent pour faire une nouvelle recherche sans pour au
actualisation [ par nacer_1954 ]
j'ai un fait un formulaire ou on opeut choisir soit une recherche avec des bouton radio on rentre le nom qu'on veut...... ou on selectionne directeme
recherche dans une liste deroulante [ par vir76 ]
Bonjour à tout le monde,Je dispose d'une liste déroulante avec des données provenant d'une table située sous MySQL.Et je souhaiterais que lorsque je c
select like and or [ par jphilippev ]
Bonjour j'ai un petit moteur de recherche sans pretention sur mon siteet je voudrais savoir si il est possible de faire ceci :$sql="select * from log
recherche dans une base de donne d'un champ avec des selection [ par temanizied ]
est ce que je peut trouver un code php/mysql qui permet la recherche dans la base : - d'un champ de saisie de type text - et 3 liste de selection :
ajout d'une clé étrangère en php [ par cloddy07 ]
Bonjour a tous, j'ai réalisé un site internet en php, pour un office du tourisme.Dans ma partie administrateur, je rencontre quelque problème avec les
Probleme a la recherche [ par arkonara ]
bonjour a tous, alors voila j'ai un formulaire de recherche dans mon appli grace auquel l'utilisateur peut effectuer divers recherche mon probleme con
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|