Foreign Key, liste déroulante... Gros défis

Florynth Messages postés 48 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 7 février 2008 - 29 juil. 2006 à 04:44
Florynth Messages postés 48 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 7 février 2008 - 2 août 2006 à 14:37
Bonjour à tous,

normalement je me débrouille pas mal seul, et quand je suis mal pris je demandes votre aide...

Je fais un CMS qui utilise une base de données MySQL (version 4.0.x) et je n'enregistre pratiquement aucune information de mon côté, mon système se connecte sur la base de donnée et load les base de donnée et les tables un peu comme phpmyadmin...

Les utilisateurs de mon système ne connaise rien ou à peu près en informatique. Donc leurs demandé de faire attention à la clé étrangère quand il rajoutes exemple une quetion/réponse à une faq est un peu trop compliqué. Don je veux récupéré les champs correspondant de la table étrangère pour faire une liste de choix pour s'assurer que la valeur entré soi valide...

Voici la table si vous êtes plus visuel

CREATE TABLE `__mod_faq` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(255) NOT NULL default '',
  `description` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `__mod_faq_question_answer` (
  `faq_id` int(11) NOT NULL default '0',
  `question` varchar(255) NOT NULL default '',
  `answer` text NOT NULL,
  PRIMARY KEY  (`faq_id`,`question`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

ALTER TABLE `__mod_faq_question_answer`
  ADD CONSTRAINT `__mod_faq_question_answer_ibfk_1` FOREIGN KEY (`faq_id`) REFERENCES `__mod_faq` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

Encore une fois j'ai cherché partout et je n'ai rien trouvé... il me faut juste résupé l'information exact de qu'elles est la clé étrangère (qui peux être double à l'occasion) et les choix possible a inséré...

La personne qui me trouve comment faire ou que me fait une ligne de code exact gagnera mon estime! et aidera beacoup de monde j'en suis sûre.

p.s. : Je sais qu'il y a de l'information concernant les clé étrangère dans les commentaire de la table

Florynth

15 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
29 juil. 2006 à 11:21
hello,

le 1er gros défi, c'est essayer de te comprendre...
0
Florynth Messages postés 48 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 7 février 2008
29 juil. 2006 à 14:41
Ok ok, on va essayé d'être plus claire :)


Table -> Column = Formulaire -> Input


Column -> Clé étrangère = Input -> Select


Le select doit contenir les entrées de la table de la clé étrangère.


Donc je doit récupé l'information de la clé étrangère (quelle table.champ) et une fois que j'ai ça je vais faire un SELECT pour construire le SELECT

Florynth
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
1 août 2006 à 01:01
Bah soit comme Malalam j'ais pas tout compris... soit tu fais une requete select sur ta table pour avoir toutes tes "Clé étrangère" et tu fais une boucle sur le résultat pour construire ton champ de selection... si tu veux le faire de façon dynamique en fonction d'un choix de l'utilisateur tu peux utiliser ajax pour updater le contenu de ton champ de selection sans recharger la page... .. .

@ tchaOo°

l'homme est un loup pour l'homme... .. .
0
Florynth Messages postés 48 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 7 février 2008
1 août 2006 à 01:36
C'est quoi la commande (select ou fonction php) pour avoir les clé étrangère ?

Savoir que `__mod_faq_question_answer`.`faq_id` as une constrainte sur `__mod_faq`.`id`

Florynth
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 août 2006 à 17:07
Je ne pige pas ton problème avec ta clef étrangère.
Moi, si j'ai une table
BLA
avec un bla_id et un bla_bla
une table BLI
avec un bli_id et un bli_bli
et une table BLI_BLA
avec un bli_id et un bla_id
Et que je crée un BLA associé à un BLI, je vais sélectionner le BLI (SELECT bli_id, bli_bli FROM bli) dans une balise select, je fais créer mon bla_bla dans un input, et ma requête, elle, crée automatiquement une entrée dans BLI_BLA après avoir créé mon bla_bla et son bla_id.
Qu'il y ait des contraintes ou pas, en cas d'effacement d'un BLI...on s'en tape.
0
Florynth Messages postés 48 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 7 février 2008
1 août 2006 à 17:16
Ben moi je sais pas que  `__mod_faq_question_answer`.`faq_id` doit être une liste de `__mod_faq`.`id`  je veux qu'il retrouve l'information dans la base de donner elle même pour que je puisse installé ce système de gestion sur toute base de donné sans que j'ai besoin de lui indiqué les liens.

Florynth
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 août 2006 à 17:35
Je ne pige toujours pas, désolé, lol.

Si tu veux donner la possibilité aux utilisateurs de créer une question_réponse pour un titre donné...(c'est ça ?)
TU affiches tes faq dans une liste avec une bête requête sur _mod_faq.
Tu gardes l'id!
genre :
<option value="45">Titre Faq</option>

Il a sélectionné l'id 45.
Bon...maintenant, il saisit sa question, sa réponse, et toi, tu fais ton insert dans __mod_faq_question_answer, avec comme faq_id l'id sélectionné.


Non ??


Bon après, si tu veux mon avis, il manque un id unique pour cette table, mais bon...


Ensuite, tu veux voir toutes les questions/réponses pour la faq 45 ?


SELECT question, reponse FROM __mod_faq_question_answer WHERE faq_id = 45.

Cette contrainte :
 ADD CONSTRAINT `__mod_faq_question_answer_ibfk_1` FOREIGN KEY (`faq_id`) REFERENCES `__mod_faq` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

On s'en fiche, dans ce cadre là.
0
Florynth Messages postés 48 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 7 février 2008
1 août 2006 à 17:50
Nous on sait en lisant le création de la table que je dois faire une liste avec un SELECT mais le programme ne la pas car je ne programme pas un gestionnaire de FAQ je programme un gestionnaire de BD donc le php doit trouvé par lui même quand faire une liste d'option sans que je lui dise donc il a besoin de savoir si il y a une constrainte quelquonque sans que je lui dise...

--> Bon après, si tu veux mon avis, il manque un id unique pour cette table, mais bon...

PRIMARY KEY  (`faq_id`,`question`)

;O)

Florynth
0
Florynth Messages postés 48 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 7 février 2008
1 août 2006 à 17:56
De plus si je sais quel type de constrainte est présente (ON DELETE CASCADE par exemple) je peux avertir l'utilisateur qu'il est sur le point de supprimer  x enregistrement comportant y sous enregistrement pour qu'il puisse confirmé qu'il veut bien le faire ou si c'est un set to null lui dire que les sous enregistrement sont maintenant attaché à aucun parent (tout ça reste à confirmé...)

Florynth
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
1 août 2006 à 18:32
Hello,

attaque la table information_schema, si tu es sous mysql, et par exemple :

SELECT*
FROMTABLE_CONSTRAINTS
WHERETABLE_SCHEMA='test_'
test_ étant le nom de ta table...

Sinon : PRIMARY KEY  (`faq_id`,`question`) n'est pas forcément unique... ;-)
0
Florynth Messages postés 48 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 7 février 2008
1 août 2006 à 18:40
Voici la requète...

 

SELECT  *
FROMTABLE_CONSTRAINTS
WHERETABLE_SCHEMA='__mod_faq'
LIMIT0,30

Et l'erreur

#1146 - Table 'florynth_test3.TABLE_CONSTRAINTS' doesn't exist 


J'utilise :
MySQL - 4.1.19-standard

--> Par défaut toutes les clé Primaire doivent être unique ;O)

Florynth
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 août 2006 à 08:51
"attaque la table information_schema"

j'ai pas dit d'attaquer la table florynth_test3 ;-)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 août 2006 à 08:55
Pour rester simple et voir par toi-même, vas dans phpmyadmin (ou le manager que tu utilises), et cherche cette table 'information_schema". regarde ce qu'elle contient. Ca devrait t'intéresser.
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
2 août 2006 à 08:56
'tain cette BASE, pas cette TABLE...dur ce matin!
0
Florynth Messages postés 48 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 7 février 2008
2 août 2006 à 14:37
Table 'florynth_test3.TABLE_CONSTRAINTS'

Signifi la TABLE_CONSTRAINTS dans la base de donné florynth_test3 et non la table florynth_test3 et le champ TABLE_CONSTRAINTS...

Et j'ai fait quelque petit vérification et la DB  INFORMATION_SCHEMA n'est disponible que dans MySQL 5.0

Quannd je disais que c'était un gros défis !

Le seul moyen que j'ai trouvé qui est du bidouillage c'est

SHOWCREATETABLE__mod_faq_question_answer

CREATE TABLE `__mod_faq_question_answer` (
  `faq_id` int(11) NOT NULL default '0',
  `question` varchar(255) NOT NULL default '',
  `answer` text NOT NULL,
  PRIMARY KEY  (`faq_id`,`question`),
  CONSTRAINT `__mod_faq_question_answer_ibfk_1` FOREIGN KEY (`faq_id`) REFERENCES `__mod_faq` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1

Après je fais un split par ligne et je fait une recherche si la ligne commence par CONSTRAINT. Après je sais pas trop comment récupéré les infos... et surtout avant de continuer je voulais essayé de trouvé un moyen propre mais après les 2 jours qu'on a passé ensemble on dirait qu'il n'y a pas de moyen propre, dit toi que j'ai fait des recherches pendant environs 6 heures sur site et forum anglais et français....

Donc si tu est un pro des expressions régulières peut-être que tu peux me retrouvé l'info la dedans (des fois il y a plus qu'un constrainte et aussi il y a plus qu'un champ en référence...). J'avoue que mon point faible en programmation c'est les expressions régulières et p-e aussi de poser des questions claires ;O)

 
Florynth
0
Rejoignez-nous