alone06
Messages postés115Date d'inscriptionmardi 9 novembre 2010StatutMembreDernière intervention18 mai 2016
-
Modifié par alone06 le 22/02/2016 à 12:10
alone06
Messages postés115Date d'inscriptionmardi 9 novembre 2010StatutMembreDernière intervention18 mai 2016
-
22 févr. 2016 à 21:14
Bonjour,
Comme le titre l'indique, j'ai un select multiple qui alimente un champs avec l'attribut clé étrangère de ma base de données.
Le soucis c'est que je voudrais que ce champs prennes plusieurs valeurs et je ne veux faire qu'un seul enregistrement. Je doute que ça soit faisable, mais je suis bloqué :(
voila la structure de mes tables :
--
-- Structure de la table `extras`
--
CREATE TABLE `extras` (
`id_extra` int(11) NOT NULL AUTO_INCREMENT,
`nom` varchar(20) NOT NULL,
`prix` text NOT NULL,
PRIMARY KEY (`id_extra`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Contenu de la table `extras`
--
INSERT INTO `extras` (`id_extra`, `nom`, `prix`) VALUES
('', 'Ext1', '0'),
('', 'Ext2', '0');
-- --------------------------------------------------------
--
-- Structure de la table `types`
--
CREATE TABLE `types` (
`id_type` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(30) NOT NULL,
`descr` varchar(100) NOT NULL,
`ext` int(11) NOT NULL,
PRIMARY KEY (`id_type`),
CONSTRAINT fk_id_extra
FOREIGN KEY (ext)
REFERENCES extras(id_extra)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
dans cet exemple, je voudrais qu'un type X aie les valeur (ext1,ext2) à la fois, j'ai éssayé aussi de mettre le champs ext en varchar mais ça n'a pas marché puisque 'id_extra' est integer.
Merci d'avance pour votre aide.
jordane45
Messages postés37714Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 septembre 2023342 22 févr. 2016 à 13:16
Bonjour,
Le soucis c'est que je voudrais que ce champs prennes plusieurs valeurs et je ne veux faire qu'un seul enregistrement
NB: Il faut que le champ "ext" de ta table "types" soit de type varchar (256 devrait largement suffire)
NB²: Et pour récupérer les infos lorsque tu en auras besoin tu utiliseras la méthode inverse : UNSERIALIZE.
PS: Cette méthode est pratique pour stocker un array dans un champ mysql .. toutefois ça limite les éventuelles requêtes de recherche dans le cas où tu en aurais besoin.....
Si tu penses que tu devras faire des requêtes sur les "ext" de la table "types" .. tu devras alors oublier cette méthode et à la place enregistrer les données dans une table séparée.....
le mcd étant de la forme :
alone06
Messages postés115Date d'inscriptionmardi 9 novembre 2010StatutMembreDernière intervention18 mai 2016 22 févr. 2016 à 20:11
Merci pour votre réponse.
En fait, je n'utilise le champs ext que pendant l'affichage ou peut etre pour calculer un prix pas plus.
Le soucis maintenant c'est que que le champs id_extra est int(11) je ne vois pas comment je pourrais mettre la clé étrangère (ext) en varchar?
jordane45
Messages postés37714Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 septembre 2023342
>
alone06
Messages postés115Date d'inscriptionmardi 9 novembre 2010StatutMembreDernière intervention18 mai 2016 Modifié par jordane45 le 22/02/2016 à 20:19
En fait, je n'utilise le champs ext que pendant l'affichage ou peut etre pour calculer un prix pas plus.
Donc la méthode avec la serialization serait suffisante
Le soucis maintenant c'est que que le champs id_extra est int(11) je ne vois pas comment je pourrais mettre la clé étrangère (ext) en varchar?
Si tu passes par de SERIALIZE ... plus besoin de table intermédiare... donc pas de clé étrangère.
Je ne comprend donc pas tes questions.... quelle méthode choisi tu de suivre et sur quoi bloques tu exactement ?
alone06
Messages postés115Date d'inscriptionmardi 9 novembre 2010StatutMembreDernière intervention18 mai 2016
>
jordane45
Messages postés37714Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 septembre 2023 Modifié par alone06 le 22/02/2016 à 20:34
Si tu passes par de SERIALIZE ... plus besoin de table intermédiare... donc pas de clé étrangère.
ça ne perturbera pas les données en cas de suppression ou d'update au niveau de la table extras?
j'opte pour la solution de sérialisation, et je bloque sur l'ajout car j'ai toujours (ext) en clé etrangère
jordane45
Messages postés37714Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 septembre 2023342
>
alone06
Messages postés115Date d'inscriptionmardi 9 novembre 2010StatutMembreDernière intervention18 mai 2016 22 févr. 2016 à 20:53
ça ne perturbera pas les données en cas de suppression ou d'update au niveau de la table extras?
Ah ben par contre ça ne les retireras pas du champ sérialisé si c'est ça ta question....
j'opte pour la solution de sérialisation, et je bloque sur l'ajout car j'ai toujours (ext) en clé etrangère
Heu... si tu passes par la sérialisation... il n'y a plus de clé étrangère !
jordane45
Messages postés37714Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 septembre 2023342
>
jordane45
Messages postés37714Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 septembre 2023 22 févr. 2016 à 20:54
Bon... oublie le SERIALIZE !
Vu ta connaissance du code et des bases de données.... reste sur le système de table intermédiaire.
Donc reprend le schéma que je t'ai donné dans la réponse précédente.
alone06
Messages postés115Date d'inscriptionmardi 9 novembre 2010StatutMembreDernière intervention18 mai 2016 22 févr. 2016 à 20:57
donc je fais comme c'est indiqué sur l'image et je mets id_type et id_extras en clés etrangères dans la table extras_types ?
jordane45
Messages postés37714Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention21 septembre 2023342 22 févr. 2016 à 21:01
22 févr. 2016 à 20:11
En fait, je n'utilise le champs ext que pendant l'affichage ou peut etre pour calculer un prix pas plus.
Le soucis maintenant c'est que que le champs id_extra est int(11) je ne vois pas comment je pourrais mettre la clé étrangère (ext) en varchar?
Modifié par jordane45 le 22/02/2016 à 20:19
Donc la méthode avec la serialization serait suffisante
Si tu passes par de SERIALIZE ... plus besoin de table intermédiare... donc pas de clé étrangère.
Je ne comprend donc pas tes questions.... quelle méthode choisi tu de suivre et sur quoi bloques tu exactement ?
Modifié par alone06 le 22/02/2016 à 20:34
ça ne perturbera pas les données en cas de suppression ou d'update au niveau de la table extras?
j'opte pour la solution de sérialisation, et je bloque sur l'ajout car j'ai toujours (ext) en clé etrangère
22 févr. 2016 à 20:53
Ah ben par contre ça ne les retireras pas du champ sérialisé si c'est ça ta question....
Heu... si tu passes par la sérialisation... il n'y a plus de clé étrangère !
22 févr. 2016 à 20:54
Vu ta connaissance du code et des bases de données.... reste sur le système de table intermédiaire.
Donc reprend le schéma que je t'ai donné dans la réponse précédente.