Boa noite,
Tenho uma dúvida na questão de relacionamento de muitos para muitos.
Tenho a tabela imóveis com a informação relativa ao imóvel e tenho a tabela divisao com a informação relativa às divisões que poderá existir para um imóvel.
Pela lógica criei a tabela imovel_divisoes que possui ambos os ids das tabelas imoveis e divisao juntamente com a descricao e metros quadrados, pois necessito desta informação também.
Acrescentei as divisões com checkboxes utilizando:
E conforme a imagem:
À medida que clico na checkbox surge a caixa de texto para introdução da descrição e dos metros quadrados.
A minha dúvida é que eu estava a fazer um simples INSERT INTO para a tabela imóveis, mas agora como tenho a terceira tabela, tenho que fazer outro INSERT INTO para esta terceira tabela (imovel_divisões), ficando com 2 INSERT INTO ou há outra maneira mais eficiente de fazer?
Desculpem a pergunta, mas ainda não tinha necessidade de efectuar a gestão de registos com relacionamento N:N.
Obrigado pela ajuda.
Cumprimentos,
AndreLC
Tenho uma dúvida na questão de relacionamento de muitos para muitos.
Tenho a tabela imóveis com a informação relativa ao imóvel e tenho a tabela divisao com a informação relativa às divisões que poderá existir para um imóvel.
Pela lógica criei a tabela imovel_divisoes que possui ambos os ids das tabelas imoveis e divisao juntamente com a descricao e metros quadrados, pois necessito desta informação também.
Código:
CREATE TABLE IF NOT EXISTS `imoveis` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`estado` varchar(50) DEFAULT NULL,
`area_util` varchar(255) DEFAULT NULL,
`area_bruta` varchar(255) DEFAULT NULL,
`area_terreno` varchar(255) DEFAULT NULL,
`montante` varchar(255) DEFAULT NULL,
`morada` varchar(255) DEFAULT NULL,
`codpostal` varchar(4) DEFAULT NULL,
`codpostal_ind` varchar(3) DEFAULT NULL,
`localidade` varchar(255) DEFAULT NULL,
`id_distrito` int(11) DEFAULT NULL,
`id_concelho` int(11) DEFAULT NULL,
`freguesia` varchar(50) DEFAULT NULL,
`mini_descricao` varchar(255) DEFAULT NULL,
`descricao` varchar(800) DEFAULT NULL,
`Imagem1` varchar(255) DEFAULT NULL,
`Imagem2` varchar(255) DEFAULT NULL,
`Imagem3` varchar(255) DEFAULT NULL,
`Imagem4` varchar(255) DEFAULT NULL,
`Imagem5` varchar(255) DEFAULT NULL,
`estado` tinyint(1) NOT NULL DEFAULT '2',
`data_insercao` date NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
INSERT INTO `imoveis` (`id`, `id_estado`, `area_util`, `area_bruta`, `area_terreno`, `montante`, `morada`, `codpostal`, `codpostal_ind`, `localidade`, `id_distrito`, `id_concelho`, `freguesia`, `mini_descricao`, `descricao`, `Imagem1`, `Imagem2`, `Imagem3`, `Imagem4`, `Imagem5`, `estado`, `data_insercao`) VALUES
(1, 'Novo', 'n/a', 'n/a', 'n/a', '144.000', 'Rua D. Afonso henriques', '5454', '565', 'Castelo Branco', 5, 149, 'Castelo Branco', 'Garagem, com acesso a casa pelo exterior. Piscina interior.', 'Moradia composta por R/C, 1º Andar e Sotão. R/C - Sala 20m², acesso ao terraço, cozinha 14m², móveis em carvalho e bancada em granito, acesso ao terraço e WC. 1º Andar - Quarto 14m², varanda, quarto 15m², roupeiro e varanda, suite 16m², 2 roupeiros. Garagem e piscina.', 'Imagem0001.jpg', 'Imagem002.jpg', 'Imagem03.jpg', 'Imagem004.jpg', 'Imagem005.jpg', 1, '2012-02-02'),
CREATE TABLE IF NOT EXISTS `divisao` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ;
INSERT INTO `divisao` (`id`, `nome`) VALUES
(1, 'Arrecadação'),
(2, 'Alpendre'),
(3, 'Biblioteca'),
(4, 'Casa de Banho'),
(5, 'Casa de Banho'),
(6, 'Casa de Banho'),
(7, 'Casa de Banho'),
(8, 'Casa de Banho'),
(9, 'Casa de Banho Partilhada'),
(10, 'Casa de Banho Privativa'),
(11, 'Closet'),
(12, 'Corredor'),
(13, 'Cozinha'),
(14, 'Cozinha Equipada'),
(15, 'Cozinha semi-equipada'),
(16, 'Despensa'),
(17, 'Escritório'),
(18, 'Hall'),
(19, 'Hall de Quartos'),
(20, 'Quarto'),
(21, 'Quarto'),
(22, 'Quarto'),
(23, 'Quarto'),
(24, 'Quarto'),
(25, 'Quarto Visitas'),
(26, 'Sala Comum'),
(27, 'Sala de Estar'),
(28, 'Sala de Jantar'),
(29, 'Sotão'),
(30, 'Suite'),
(31, 'Suite');
CREATE TABLE IF NOT EXISTS `imovel_divisoes` (
`imovel_id` int(11) NOT NULL,
`divisao_id` int(11) NOT NULL,
`descricao` varchar(255) NOT NULL,
`metros_quadrados` int(11) NOT NULL,
PRIMARY KEY (`imovel_id`,`divisao_id`),
KEY `imovel_id` (`imovel_id`),
KEY `divisao_id` (`divisao_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Acrescentei as divisões com checkboxes utilizando:
PHP:
<?php
$q = mysql_query("SELECT * from divisao");
while($nomes = mysql_fetch_array($q)){
?>
<input type="checkbox" name="divisoes[]" id="<?php echo $nomes["id"]; ?>" value="<?php echo $nomes["nome"]; ?>" onClick="chckd()"><?php echo $nomes["nome"]; ?>
<div id="div_<?php echo $nomes["id"]; ?>" style="display: none;">
<input name="desc_<?php echo $nomes["nome"]; ?>" type="text" id="desc_<?php echo $nomes["nome"]; ?>" size="61" value="Digite aqui a descrição" onfocus="if (this.value == 'Digite aqui a descrição') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Digite aqui a descrição';}" class="form_pesquisa" />
<input name="area_<?php echo $nomes["id"]; ?>" type="text" id="area_<?php echo $nomes["id"]; ?>" size="2" /> <label>m²</label></div>
<?php
};
?>
À medida que clico na checkbox surge a caixa de texto para introdução da descrição e dos metros quadrados.
A minha dúvida é que eu estava a fazer um simples INSERT INTO para a tabela imóveis, mas agora como tenho a terceira tabela, tenho que fazer outro INSERT INTO para esta terceira tabela (imovel_divisões), ficando com 2 INSERT INTO ou há outra maneira mais eficiente de fazer?
Desculpem a pergunta, mas ainda não tinha necessidade de efectuar a gestão de registos com relacionamento N:N.
Obrigado pela ajuda.
Cumprimentos,
AndreLC