Boumbadaboum Posté 13 Août 2005 Posté 13 Août 2005 (modifié) bonjour, J'ai du mal à trouver un schéma relationnel pour lier des définitions entre elles en proposant aux visiteurs de choisir eux mêmes les liens et expliquer leur choix. J'explique avec un exemple d'abord : J'ai une définition A, et une définition B Un visiteur V trouve que A devrait être liée à B. Ensuite, après diverses validations dans l'admin etc... un lien apparaît entre A et B accompagné du commentaire de V. Un nombre non défini de liens peuvent ainsi être mis en place par les visiteur. ça vous dit quelque chose? avez vous besoin de précisions supplémentaires? Personnellement je rame un peu sur ce problème, alors j'écoute vos conseils ! Modifié 13 Août 2005 par Boumbadaboum
Boumbadaboum Posté 13 Août 2005 Auteur Posté 13 Août 2005 Une solution que je vois serait de créer une table Lien avec le libellé de chaque définition. Puis chaque fois que l'utilisateur décide de lier une définition à une autre, cela crée 3 champs dans la table (définition lié, url de la def, commentaire) C'est possible ? idiot?
rportal Posté 13 Août 2005 Posté 13 Août 2005 C'est pas bete mais n'oublies pas que si A est lié à B, cela implique que B est lie a A moi je verrais bien une table du genre: cle_def_A | clef_def_B | commentaire j'imagine que ton url est deja dans une autre table... Ou sinon tu prends ta solution et tu dupliques l'entree: une pour A et une pour B
Boumbadaboum Posté 13 Août 2005 Auteur Posté 13 Août 2005 (modifié) C'est pas bete mais n'oublies pas que si A est lié à B, cela implique que B est lie a A ouah encore plus compliqué maintenant ! Là je vois plus comment faire, mais ça peut peut-être attendre un peu pour ce système de vase communicant (en plus ça necessite deux commentaires de la part du visiteur, les raisons qui lient A vers B ne sont pas celles qui lient B vers A) Comment fait-on pour créer des nouveaux champs dans une tables avec une instruction php ? Modifié 13 Août 2005 par Boumbadaboum
Boumbadaboum Posté 13 Août 2005 Auteur Posté 13 Août 2005 (modifié) Si j'ai peut être trouvé un truc simple : Je dis au visiteur de choisir deux définitions à lier ensemble, avec un commentaire unique pour les deux. J'insère ça dans une table Liens avec les champs id Def A Def B Commentaire Ensuite quand un visiteur visite une définition D le script va chercher tous les tuples où se trouvent le nom de la definition D dans Def A ou Def B ça marche selon vous? Modifié 13 Août 2005 par Boumbadaboum
rportal Posté 13 Août 2005 Posté 13 Août 2005 voici une solution simple qui permet de gerer une laison dans les 2 sens: Il faut 2 tables: laison et def_in_laison (par ex) liaison : [ id, commentaire] def_in_liason : [id_liaison, def] => Quand tu crees une nouvelle liaison tu dois: 1) creer une liaison dans la table liaison 2) recuperer l'id 3) inserer une entre pour def A dans la table def_in_liaison => Quand tu veux rechercher les def associees a une def: SELECT l.id,l.commentaire,d2.def FROM liaison AS l, def_in_liason AS d1, def_in_liason AS d2 WHERE d1.def = '<Ta_def_A>' AND d1.id_liaison = l.id AND d2.id_liaison = l.id
Boumbadaboum Posté 13 Août 2005 Auteur Posté 13 Août 2005 ok merci pour ta réponse. Mais pour l'instant je préfère ma solution juste au dessus . Soit j'ai pas bien compris la tienne, soit j'ai pas vu un gros bug dans la mienne. Vous en pensez quoi? (c'est pas moi le pro, je peux perdre j'ai pas honte )
rportal Posté 13 Août 2005 Posté 13 Août 2005 le seul probleme est que tu auras besoin de faire des tests en plus dans ton code pour savoir quelles sont les definitions que tu cherches : colonne A ou B? et ce pour chaque tuple apres de toute facon ta solution fonctionnera aussi mais il faudrait faire une etude un peu plus poussee pour savoir qu'elle serait la solution optimale... Et il est trop tard pour faire de joli calcul bon courage
Boumbadaboum Posté 13 Août 2005 Auteur Posté 13 Août 2005 le seul probleme est que tu auras besoin de faire des tests en plus dans ton code pour savoir quelles sont les definitions que tu cherches : colonne A ou B? et ce pour chaque tuple c'est juste d'ailleur je vois pas bien comment faire. Ou alors je crée deux requêtes SQL pour analyser successivement les deux champs et les traiter en sens inverse
rportal Posté 13 Août 2005 Posté 13 Août 2005 bah je t'ai donné une solution qui permet de faire cela avec une seule requete: tu recupere directement les definitions et les commentaires associees a une def precise . Mais bon...
Boumbadaboum Posté 13 Août 2005 Auteur Posté 13 Août 2005 Bon j'ai réussi en faisant deux requetes sql séparée. Au début j'avais essayé de placer structure "if" "elseif" à l'intérieur de la traditionnelle boucle while servant à lire les tableaux. Et bien la bouche effectuait l'action "echo" de la première condition if en se contrefichant de la condition du if, et donc sans même lire la suite contenu dans le "elseif". Si quelqu'un peut m'expliquer, j'apprendrai quelque chose !
rportal Posté 13 Août 2005 Posté 13 Août 2005 tu as du faire un faute de frappe du genre: if($resultat['def']=$def_recherchee) { echo $resultat['def'];} du coup tu passes toujours dans le if car ici on fait une affectation de valeur et pas un test (==). une affectation de valeur en php retourne la valeur affectee et si celle-ci est differente de 0, la valeur est consideree comme un test vrai. C'est generalement l'erreur classique quand une condition est toujours vraie
Boumbadaboum Posté 13 Août 2005 Auteur Posté 13 Août 2005 Donc une instruction if est possible dans une boucle while ? Je suis sur d'avoir écrit correctement les variables, j'ai même fait exprès de provoquer une erreur avec une instruction if impossible, ex : if($requeteImpossible['def']=$def_recherchee) {echo"......"} Et bien ça lisait quand même le echo
rportal Posté 13 Août 2005 Posté 13 Août 2005 la syntaxe pour tester une egalité est == et non = la syntaxe exacte est if($requeteImpossible['def']==$def_recherchee) {echo"......"}
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant