Ir ao conteúdo
  • Cadastre-se

Buscar dados do MYQSL?


leonine

Posts recomendados

Pessoal, continuo com problemas sob o relacionamento de tabelas. O problema agora e como buscar esses dados pelo ID.

Quando crio uma pagina qualquer sem que haja relacionamento de tabelas, busco normalmente os dados do banco de dados pelo ID sem dificuldade, mas, quando tento fazer o mesmo processo em tabelas relacionadas, os dados não aparecem.

Alguém poderia me ajudar?

Aqui esta minha tabela:

____________-------------_____________…

CREATE TABLE IF NOT EXISTS `anuncio_localidade` (

`id_anuncio` int(11) NOT NULL AUTO_INCREMENT,

`id_localidade` int(11) NOT NULL,

`anuncio_nome` tinytext,

`anuncio_descricao` tinytext,

`anuncio_imagem` tinytext,

`anuncio_tel` tinytext,

`anuncio_valor` tinytext,

PRIMARY KEY (`id_anuncio`),

KEY `id_localidade` (`id_localidade`)

) ENGINE=InnoDB DEFAULT CHARSET=ascii AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `comentario_local` (

`id_coment_local` int(11) NOT NULL AUTO_INCREMENT,

`id_localidade` int(11) NOT NULL,

`coment_nome` tinytext,

`coment_comentario` tinytext,

`coment_data` tinytext,

`coment_email` tinytext,

PRIMARY KEY (`id_coment_local`),

KEY `id_localidade` (`id_localidade`)

) ENGINE=InnoDB DEFAULT CHARSET=ascii ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `fotos_localidades` (

`id_foto_local` int(11) NOT NULL AUTO_INCREMENT,

`id_localidade` int(11) NOT NULL,

`foto_titulo` tinytext,

`foto_descricao` tinytext,

`foto_foto` tinytext,

PRIMARY KEY (`id_foto_local`),

KEY `id_localidade` (`id_localidade`),

KEY `id_localidade_2` (`id_localidade`)

) ENGINE=InnoDB DEFAULT CHARSET=ascii AUTO_INCREMENT=3 ;

INSERT INTO `fotos_localidades` (`id_foto_local`, `id_localidade`, `foto_titulo`, `foto_descricao`, `foto_foto`) VALUES

(1, 1, 'ferias em coroa', 'Prov??vel divulga????o dos resultados finais e disponibilidade dos Boletins de Desempenho referentes ao Vestibular em duas fases (CPL). (Ver Manual do Candidato, Parte IV, item 8 e 9.)', 'img7.jpg'),

(2, 2, 'dddd', '\r\nAte a?? tudo bem.. agora vamos ver a coluna ID. Para exibir os resultados temos o arquivo exibir.php(onde se localiza o c??digo acima). Vamos supor que h?? uma empresa... e nessa empresa cada funcion??rio deve dar seu nome at?? o dia "tal". Temos 123 no', 'coracao-luz_2_1.jpg');

CREATE TABLE IF NOT EXISTS `localidades` (

`id_localidade` int(11) NOT NULL AUTO_INCREMENT,

`localidade` tinytext,

`descricao` tinytext,

`fotoUM` tinytext,

`fotoDois` tinytext,

`fotoTres` tinytext,

PRIMARY KEY (`id_localidade`)

) ENGINE=InnoDB DEFAULT CHARSET=ascii AUTO_INCREMENT=3 ;

INSERT INTO `localidades` (`id_localidade`, `localidade`, `descricao`, `fotoUM`, `fotoDois`, `fotoTres`) VALUES

(1, 'Coroa', 'muito linda, linda demais. ok você ssssssssssssssssssssssssssssssss\r\nssss… ddddddddddd ddddddddddddddddd dddddddd', 'coracao-luz_1_1.jpg', 'coracao-luz_2.jpg', 'img9_2.jpg'),

(2, 'barra do gila', '\r\nAte a?? tudo bem.. agora vamos ver a coluna ID. Para exibir os resultados temos o arquivo exibir.php(onde se localiza o c??digo acima). Vamos supor que h?? uma empresa... e nessa empresa cada funcion??rio deve dar seu nome at?? o dia "tal". Temos 123 no', 'PQAAAEPa06uYDQyI51BJdwJR3bZmqOY_RcLJxS8… 'img8_2.jpg', 'img9_3.jpg');

ALTER TABLE `anuncio_localidade`

ADD CONSTRAINT `anuncio_localidade_ibfk_1` FOREIGN KEY (`id_localidade`) REFERENCES `localidades` (`id_localidade`) ON DELETE NO ACTION ON UPDATE CASCADE;

ALTER TABLE `comentario_local`

ADD CONSTRAINT `comentario_local_ibfk_1` FOREIGN KEY (`id_localidade`) REFERENCES `localidades` (`id_localidade`) ON DELETE NO ACTION ON UPDATE CASCADE;

ALTER TABLE `fotos_localidades`

ADD CONSTRAINT `fotos_localidades_ibfk_1` FOREIGN KEY (`id_localidade`) REFERENCES `localidades` (`id_localidade`) ON DELETE NO ACTION ON UPDATE CASCADE;

relacionamento.png

--------------------------------------…

Na página de exibição dos dados, estou pondo o seguinte código:

SELECT comentario_local.*, fotos_localidades.*, localidades.*

FROM ((comentario_local LEFT JOIN localidades ON localidades.id_localidade=comentario_loc… RIGHT JOIN fotos_localidades ON fotos_localidades.id_localidade=localida…

WHERE id_localidade = colname

Link para o comentário
Compartilhar em outros sites

  • Moderador

cara, ja testou o codigo SQL que eu postei na sua primeira pergunta?

se eu nao me engano consultas com left join sao usadas quando nao há relacionamentos.. é uma forma de relacionar... mas como você tem relacionamentoss.. tens que usar os inner joins ou outro metodo mais chatinho de fazeer

leia o meu post #21 deste seu topico aqui: http://forum.clubedohardware.com.br/relacionamento-tabelas-mysql/1008509/2

teste aquela consulta

cara.. olhando melhor isso... acho que você fez errado.. seus relacionamentos estão todos invertidos. nao é em cada tabela que você tem que resgatar o codigo da localidade. é a localidade que precisa receber os codigos das tabelas.

é assim que você identifica o anuncio X da localidade ID X

refaça seu banco.. vai te apresentar inconsistencias.

Link para o comentário
Compartilhar em outros sites

cara, ja testou o codigo SQL que eu postei na sua primeira pergunta?

se eu nao me engano consultas com left join sao usadas quando nao há relacionamentos.. é uma forma de relacionar... mas como você tem relacionamentoss.. tens que usar os inner joins ou outro metodo mais chatinho de fazeer

leia o meu post #21 deste seu topico aqui: http://forum.clubedohardware.com.br/relacionamento-tabelas-mysql/1008509/2

teste aquela consulta

cara.. olhando melhor isso... acho que você fez errado.. seus relacionamentos estão todos invertidos. nao é em cada tabela que você tem que resgatar o codigo da localidade. é a localidade que precisa receber os codigos das tabelas.

é assim que você identifica o anuncio X da localidade ID X

refaça seu banco.. vai te apresentar inconsistencias.

Veja se o codigo ta certo agora:

SELECT anuncio_localidade.anuncio_nome, anuncio_localidade.anuncio_descricao, anuncio_localidade.anuncio_imagem, anuncio_localidade.anuncio_tel, anuncio_localidade.anuncio_valor, comentario_local.coment_nome, comentario_local.coment_comentario, comentario_local.coment_data, comentario_local.coment_email, fotos_localidades.foto_titulo, fotos_localidades.foto_descricao, fotos_localidades.foto_foto

FROM localidades

INNER JOIN anuncio_localidade ON anuncio_localidade.id_anuncio = anuncio_localidade

INNER JOIN comentario_local ON comentario_local.id_coment_local = comentario_local

INNER JOIN fotos_localidades ON fotos_localidades.id_foto_locall = fotos_localidades

WHERE localidades.id_localidade

ABAIXO A TABELA MODIFICADA

-------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `anuncio_localidade` (

`id_anuncio` int(11) NOT NULL AUTO_INCREMENT,

`anuncio_nome` tinytext,

`anuncio_descricao` tinytext,

`anuncio_imagem` tinytext,

`anuncio_tel` tinytext,

`anuncio_valor` tinytext,

PRIMARY KEY (`id_anuncio`)

) ENGINE=InnoDB DEFAULT CHARSET=ascii AUTO_INCREMENT=1 ;

--

-- Dumping data for table `anuncio_localidade`

--

-- --------------------------------------------------------

--

-- Table structure for table `comentario_local`

--

CREATE TABLE IF NOT EXISTS `comentario_local` (

`id_coment_local` int(11) NOT NULL AUTO_INCREMENT,

`coment_nome` tinytext,

`coment_comentario` tinytext,

`coment_data` tinytext,

`coment_email` tinytext,

PRIMARY KEY (`id_coment_local`)

) ENGINE=InnoDB DEFAULT CHARSET=ascii ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;

--

-- Dumping data for table `comentario_local`

--

-- --------------------------------------------------------

--

-- Table structure for table `fotos_localidades`

--

CREATE TABLE IF NOT EXISTS `fotos_localidades` (

`id_foto_local` int(11) NOT NULL AUTO_INCREMENT,

`foto_titulo` tinytext,

`foto_descricao` tinytext,

`foto_foto` tinytext,

PRIMARY KEY (`id_foto_local`)

) ENGINE=InnoDB DEFAULT CHARSET=ascii AUTO_INCREMENT=3 ;

--

-- Dumping data for table `fotos_localidades`

--

INSERT INTO `fotos_localidades` (`id_foto_local`, `foto_titulo`, `foto_descricao`, `foto_foto`) VALUES

(1, 'ferias em coroa', 'Prov??vel divulga????o dos resultados finais e disponibilidade dos Boletins de Desempenho referentes ao Vestibular em duas fases (CPL). (Ver Manual do Candidato, Parte IV, item 8 e 9.)', 'img7.jpg'),

(2, 'dddd', '\r\nAte a?? tudo bem.. agora vamos ver a coluna ID. Para exibir os resultados temos o arquivo exibir.php(onde se localiza o c??digo acima). Vamos supor que h?? uma empresa... e nessa empresa cada funcion??rio deve dar seu nome at?? o dia "tal". Temos 123 no', 'coracao-luz_2_1.jpg');

-- --------------------------------------------------------

--

-- Table structure for table `localidades`

--

CREATE TABLE IF NOT EXISTS `localidades` (

`id_localidade` int(11) NOT NULL AUTO_INCREMENT,

`localidade` tinytext,

`descricao` tinytext,

`fotoUM` tinytext,

`fotoDois` tinytext,

`fotoTres` tinytext,

`id_anuncio` int(11) NOT NULL,

`id_coment_local` int(11) NOT NULL,

`id_foto_local` int(11) NOT NULL,

PRIMARY KEY (`id_localidade`),

KEY `id_anuncio` (`id_anuncio`),

KEY `id_coment_local` (`id_coment_local`),

KEY `id_foto_local` (`id_foto_local`)

) ENGINE=InnoDB DEFAULT CHARSET=ascii AUTO_INCREMENT=3 ;

--

-- Dumping data for table `localidades`

--

INSERT INTO `localidades` (`id_localidade`, `localidade`, `descricao`, `fotoUM`, `fotoDois`, `fotoTres`, `id_anuncio`, `id_coment_local`, `id_foto_local`) VALUES

(1, 'Coroa', 'muito linda, linda demais. ok você ssssssssssssssssssssssssssssssss\r\nssssssssssssssssssssssss\r\ndddddddddddddddddddddddddddddddddddddddddddddddddd\r\nffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ddddddddddd ddddddddddddddddd dddddddd', 'coracao-luz_1_1.jpg', 'coracao-luz_2.jpg', 'img9_2.jpg', 0, 0, 0),

(2, 'barra do gila', '\r\nAte a?? tudo bem.. agora vamos ver a coluna ID. Para exibir os resultados temos o arquivo exibir.php(onde se localiza o c??digo acima). Vamos supor que h?? uma empresa... e nessa empresa cada funcion??rio deve dar seu nome at?? o dia "tal". Temos 123 no', 'PQAAAEPa06uYDQyI51BJdwJR3bZmqOY_RcLJxS8DxfP_Vjhvc8ig7QxBibu4PeggDuiSnargFRuD0NjR4p-9nuWVR2oAm1T1UGwwPwyx9FBBijkVTM77JH4rIG0v_1.jpg', 'img8_2.jpg', 'img9_3.jpg', 0, 0, 0);

--

-- Constraints for dumped tables

--

--

-- Constraints for table `localidades`

--

ALTER TABLE `localidades`

ADD CONSTRAINT `localidades_ibfk_3` FOREIGN KEY (`id_foto_local`) REFERENCES `localidades` (`id_foto_local`) ON DELETE CASCADE ON UPDATE CASCADE,

ADD CONSTRAINT `localidades_ibfk_1` FOREIGN KEY (`id_anuncio`) REFERENCES `localidades` (`id_anuncio`) ON DELETE CASCADE ON UPDATE CASCADE,

ADD CONSTRAINT `localidades_ibfk_2` FOREIGN KEY (`id_coment_local`) REFERENCES `localidades` (`id_coment_local`) ON DELETE CASCADE ON UPDATE CASCADE;

relao.jpg

Link para o comentário
Compartilhar em outros sites

  • Moderador

esse foi a consulta que eu postei no seu outro topico. no post #21.

se usar isso no seu banco atual é bem possivel que nao funcione.. uma vez que você fez todos os relacionamentos invertidos.

como expliquei mais acima.. nao é as tabelas que devem receber o id da localidade, mas sim a localidade receber a id das tabelas. porque sua tabela "localidade" é o ponto central, tudo gira em torno dela. então é ela que recebe as ids e é por ela que você faz a consulta.

e nao esqueca que quando você especifica na clausla "Where localidades.id_localidade" se quer que ele traga as informaçoes de uma localidade especifica.. tens que igualar a id da localidade especifica.. senao ele vai trazer todos os registros.

então fica "... WHERE localidades.id_localidade = id da localidade"

pondo em prática.. se você quer todas as informaçoes da localidade id 1 você coloca:

" SELECT ... FROM localidades WHERE localidades.id_localidade = 1 "

lembre-se que eu coloquei as "reticencias" (...) para nao ter que digitar todo aquele codigo aqui neste exemplo.. mas na sua consulta você deve por completo

Link para o comentário
Compartilhar em outros sites

Veja agora:

SELECT anuncio_localidade.anuncio_nome, anuncio_localidade.anuncio_descricao, anuncio_localidade.anuncio_imagem, anuncio_localidade.anuncio_tel, anuncio_localidade.anuncio_valor, comentario_local.coment_nome, comentario_local.coment_comentario, comentario_local.coment_data, comentario_local.coment_email, fotos_localidades.foto_titulo, fotos_localidades.foto_descricao, fotos_localidades.foto_foto

FROM localidades, anuncio_localidade, comentario_local, fotos_localidades

WHERE localidades.id_localidade = id_localidade

Link para o comentário
Compartilhar em outros sites

  • Moderador

nao tem como testar amigo, existem erros na sua tabela. por exemplo:

você nao tem nenhum registro em anuncios, então na sua tabela localidade.. a id está zerada. e se você incluir um registro... nao dá pra incluir pois o relacionamento ta bem estranho.. aqui nao funcionou de jeito nenhum.

outra coisa.. só usa o campo tinytext se for usar grandes quantidades de texto.. senao, use o varchar. no campo de datas, use o tipo DATE. vale o mesmo para os que recebem os telefones e valores e titulos. use varchar.

Link para o comentário
Compartilhar em outros sites

Mas, o codigo da pagiana de exibição está ok?

Pronto!! Fiz as modificações:

CREATE TABLE IF NOT EXISTS `anuncio_localidade` (

`id_anuncio` int(11) NOT NULL AUTO_INCREMENT,

`anuncio_nome` varchar(30) DEFAULT NULL,

`anuncio_descricao` varchar(500) DEFAULT NULL,

`anuncio_imagem` varchar(50) DEFAULT NULL,

`anuncio_tel` varchar(15) DEFAULT NULL,

`anuncio_valor` varchar(15) DEFAULT NULL,

PRIMARY KEY (`id_anuncio`)

) ENGINE=InnoDB DEFAULT CHARSET=ascii AUTO_INCREMENT=2 ;

--

-- Dumping data for table `anuncio_localidade`

--

INSERT INTO `anuncio_localidade` (`id_anuncio`, `anuncio_nome`, `anuncio_descricao`, `anuncio_imagem`, `anuncio_tel`, `anuncio_valor`) VALUES

(1, 'Lorem ipsum', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis hendrerit consequat enim non dictum. In nec neque lacus, nec lobortis nisi. Vestibulum sed lobortis dolor. Sed eleifend aliquam pretium. In neque nunc, aliquam id aliquet et, accumsan in metus. Etiam sollicitudin feugiat elit, non tempor odio vulputate vel. Sed porttitor leo sed nisl elementum semper. Maecenas facilisis semper nisi sed posuere. Vestibulum quis eros quis quam porta lobortis porttitor eu augue. Donec tristique erat ac n', 'Lorem ipsum', 'Lorem ipsum', 'Lorem ipsum');

-- --------------------------------------------------------

--

-- Table structure for table `comentario_local`

--

CREATE TABLE IF NOT EXISTS `comentario_local` (

`id_coment_local` int(11) NOT NULL AUTO_INCREMENT,

`coment_nome` varchar(30) DEFAULT NULL,

`coment_comentario` varchar(500) DEFAULT NULL,

`coment_data` date DEFAULT NULL,

`coment_email` varchar(50) DEFAULT NULL,

PRIMARY KEY (`id_coment_local`)

) ENGINE=InnoDB DEFAULT CHARSET=ascii ROW_FORMAT=DYNAMIC AUTO_INCREMENT=2 ;

--

-- Dumping data for table `comentario_local`

--

INSERT INTO `comentario_local` (`id_coment_local`, `coment_nome`, `coment_comentario`, `coment_data`, `coment_email`) VALUES

(1, 'Lorem ipsum', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis hendrerit consequat enim non dictum. In nec neque lacus, nec lobortis nisi. Vestibulum sed lobortis dolor. Sed eleifend aliquam pretium. In neque nunc, aliquam id aliquet et, accumsan in metus. Etiam sollicitudin feugiat elit, non tempor odio vulputate vel. Sed porttitor leo sed nisl elementum semper. Maecenas facilisis semper nisi sed posuere. Vestibulum quis eros quis quam porta lobortis porttitor eu augue. Donec tristique erat ac n', '2012-01-12', 'Lorem ipsum');

-- --------------------------------------------------------

--

-- Table structure for table `fotos_localidades`

--

CREATE TABLE IF NOT EXISTS `fotos_localidades` (

`id_foto_local` int(11) NOT NULL AUTO_INCREMENT,

`foto_titulo` varchar(30) DEFAULT NULL,

`foto_descricao` varchar(300) DEFAULT NULL,

`foto_foto` char(20) DEFAULT NULL,

PRIMARY KEY (`id_foto_local`)

) ENGINE=InnoDB DEFAULT CHARSET=ascii AUTO_INCREMENT=4 ;

--

-- Dumping data for table `fotos_localidades`

--

INSERT INTO `fotos_localidades` (`id_foto_local`, `foto_titulo`, `foto_descricao`, `foto_foto`) VALUES

(3, 'Lorem ipsum', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis hendrerit consequat enim non dictum. In nec neque lacus, nec lobortis nisi. Vestibulum sed lobortis dolor. Sed eleifend aliquam pretium. In neque nunc, aliquam id aliquet et, accumsan in metus. Etiam sollicitudin feugiat elit, non tempor ', 'Lorem ipsum');

-- --------------------------------------------------------

--

-- Table structure for table `localidades`

--

CREATE TABLE IF NOT EXISTS `localidades` (

`id_localidade` int(11) NOT NULL AUTO_INCREMENT,

`localidade` varchar(20) DEFAULT NULL,

`descricao` tinytext,

`fotoUM` varchar(20) DEFAULT NULL,

`fotoDois` varchar(20) DEFAULT NULL,

`fotoTres` varchar(20) DEFAULT NULL,

`id_anuncio` int(11) NOT NULL,

`id_coment_local` int(11) NOT NULL,

`id_foto_local` int(11) NOT NULL,

PRIMARY KEY (`id_localidade`),

KEY `id_foto_local` (`id_foto_local`),

KEY `id_coment_local` (`id_coment_local`),

KEY `id_anuncio` (`id_anuncio`)

) ENGINE=InnoDB DEFAULT CHARSET=ascii AUTO_INCREMENT=3 ;

--

-- Dumping data for table `localidades`

--

--

-- Constraints for dumped tables

--

--

-- Constraints for table `localidades`

--

ALTER TABLE `localidades`

ADD CONSTRAINT `localidades_ibfk_3` FOREIGN KEY (`id_anuncio`) REFERENCES `anuncio_localidade` (`id_anuncio`) ON DELETE CASCADE ON UPDATE CASCADE,

ADD CONSTRAINT `localidades_ibfk_1` FOREIGN KEY (`id_foto_local`) REFERENCES `fotos_localidades` (`id_foto_local`) ON DELETE CASCADE ON UPDATE CASCADE,

ADD CONSTRAINT `localidades_ibfk_2` FOREIGN KEY (`id_coment_local`) REFERENCES `comentario_local` (`id_coment_local`) ON DELETE CASCADE ON UPDATE CASCADE;

Olhe agora e me diga se está tudo certo!

Link para o comentário
Compartilhar em outros sites

  • Moderador

Ola amigo, sua tabela esta OK agora. sua consulta estava quase certa. você optou por fazer ela do jeito mais "fácil" porém sujeto a mais erros de sintaxe.

aqui a correçao das coisas que faltaram na sua consulta:

SELECT anuncio_localidade.anuncio_nome, anuncio_localidade.anuncio_descricao, anuncio_localidade.anuncio_imagem, anuncio_localidade.anuncio_tel, anuncio_localidade.anuncio_valor, comentario_local.coment_nome, comentario_local.coment_comentario, comentario_local.coment_data, comentario_local.coment_email, fotos_localidades.foto_titulo, fotos_localidades.foto_descricao, fotos_localidades.foto_foto

FROM localidades, anuncio_localidade, comentario_local, fotos_localidades

WHERE

anuncio_localidade.id_anuncio = localidades.id_anuncio and

fotos_localidades.id_foto_local = localidades.id_foto_local and

comentario_local.id_coment_local = localidades.id_coment_local and

localidades.id_localidade = 4

a parte em negrito era o que estava faltando. isso porque você adicionou cada tabela no FROM, quando você faz isso deve referenciar na clausula WHERE seguido do operador "AND"

é possivel fazer essa mesma consulta com INNER JOIN, na minha opiniao é melhor. mas.. se esta ja esta funcionando nao há porque mexer novamente.

outra coisa aquele id 4 .. eu coloquei de teste, eu cadastrei alguns registros para fazer o teste da consulta, o id 4 é o id da localidade que você queira consultar.. cole esta consulta no seu sql e mude o ID final ali para ver seus resultados.

bem agora que você tem ja a consulta funcionando.. eu posso te dizer.. há uma maneira muito melhor de fazer suas consultas baseada nesta. chama-se VIEW. é uma tabela espelho. você cria a view a partir da sua consulta, então será criada uma nova "tabela" espelho nesta tabela você só precisa dar um select * from nomedatabela where id = id do registro.

Para criar esta tabela espelho faça assim:

Create VIEW NomeDaTabela AS

SELECT anuncio_localidade.anuncio_nome, anuncio_localidade.anuncio_descricao, anuncio_localidade.anuncio_imagem, anuncio_localidade.anuncio_tel, anuncio_localidade.anuncio_valor, comentario_local.coment_nome, comentario_local.coment_comentario, comentario_local.coment_data, comentario_local.coment_email, fotos_localidades.foto_titulo, fotos_localidades.foto_descricao, fotos_localidades.foto_foto, localidades.id_localidade

FROM localidades, anuncio_localidade, comentario_local, fotos_localidades

WHERE

anuncio_localidade.id_anuncio = localidades.id_anuncio and

fotos_localidades.id_foto_local = localidades.id_foto_local and

comentario_local.id_coment_local = localidades.id_coment_local

feito isso .. para consultar nela é só fazer:

SELECT * FROM NomeDaTabela WHERE id_localidade = 4

assim traria tudo da localidade 4

e por fim.. nao se preocupe com os registros da tabela espelho. você nao pode deletar diretamente nela. caso você queira deletar algum.. delete na tabela localidades, pois como você ta usando a restriçao em cascata, quando você deletar uma localidade, deletará os registros nas outras tabelas referente a localidade que você apagou.. e apagará da tabela espelho automaticamente.

simples nao?

Link para o comentário
Compartilhar em outros sites

Olá gente, opinião minha....

Não sei quanto ao DIF, mas pra mim fica bem confuso ler esses selects, esses nomes de tabelas e campos "gigantes" na minha opinião.

Eu prefiro trabalhar de uma forma padronizada de nomes de tabelas e campos.

Padrão para tabelas EU gosto de definir um ALIAS para cada tabela, sendo "CL" alias para Cliente, "FN" para Fornecedores, e assim vai.

Os campos sempre iniciarão com o ALIAS da tabela, mais 4 (tem gente que prefere alias + 6 char) caracteres indicando o que seria.

Tabela Clientes:

tbCL

Campos:

CLCDCL - Código do cliente

CLRAZA - Nome/Razão Social

CLCNPJ - CPF/CNPJ

CLINSC - RG/Inscrição

Bom, é só uma dica/palpite.

Sei que ninguém perguntou, mas vai a dica. ^^

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Erciley Junior, sua dica é boa, mas como ele ja estava usando assim.. eu segui o padrão dele.

de qualquer forma, nao é muito bom trabalhar com aliases se nao esta familiarizado com as consultas em nome completo. por isso que é bom sempre antes treinar com consultas no formato "nomeDatabela.nomedoCampo" depois que dominar a consulta assim.. aí passa a usar o aliases.

mas uma coisa eu concordo contigo direto.. o nome dessas tabelas estão gigantes. por padrão, todo nome de tabela deve ser no singular e se for composto, usar o camel case

e sempre tentando respeitar as regras de normalizaçao para nao haver inconsistencias.

e que as chances de erros em consulta é muito maior usando o aliases se ele nao dominar as consultas por extenso.

Link para o comentário
Compartilhar em outros sites

@DIF, eu discordo quase totalmente, pois creio que a leitura do código melhora,

e que as chances de erro diminuem muito, mesmo trabalhando desde o "início" com ALIAS, mas não estamos aqui para discutir preferências e como eu disse, eu acredito nisso, não tenho estatísticas para falar se é melhor ou pior. ^^

Pelo menos concordamos que os nomes estão grandes demais.

Quando trabalho com algo que está nesse formato do nosso amigo, utilizo o AS para encurtar as coisas, pois eu particularmente fico doido com isso. ^^

Leonine, tente usar o AS em alguma consulta fora do seu sistema só para você ver se você se habitua e/ou prefere, ex.:


SELECT foto_localidade.campo1, foto_localidade.campo2, foto_localidade.campo3, foto_localidade.campo4 FROM foto_localidade WHERE BLABLABLA

faça assim:

SELECT foto_lo.campo1, foto_lo.campo2, foto_lo.campo3, foto_lo.campo4 FROM foto_localidade as foto_lo WHERE BLABLABLA

foi um exemplo besta, só pra você entender o AS, se já não sabia.

Link para o comentário
Compartilhar em outros sites

  • Moderador

Bom, quem sou eu pra te criricar? rssr você se habituou assim. é bom você segue um padrão! eu me habituei a fazer por extenso por opção mesmo! agora sobre o jeito da consulta eu realmente nao gosto muito do método embora eu ja tenha usado.. eu sempre uso com INNER JOIN diminui bastante a consulta.

enfim, o problema dele praticamente ja foi resolvido, eu testei aqui o banco e consulta esta funcionando perfeitamente. agora cabe a ele decidir qual metodo ele deseja seguir independentemente do que ele decidi, será uma boa escolha.

abraço

Link para o comentário
Compartilhar em outros sites

  • Moderador
A sim, só vim dar uma opinada no tópico (só apareci quando estava resolvido ^^) devido ao código dele.

É sempre bom trocar idéias e opiniões, as vezes percebemos um vício que temos que poderia ser melhorado.

Abraço =)

É isso ai! sinta-se livre para opinar! concordo plenamente que é sempre bom trocarmos ideias. acho q vou parar por aqui.. ja estamos saindo do foco do topico rsrs só esperamos o autor se manifestar para nos dizer se funcionou com ele nossa ajuda.

abraço

Link para o comentário
Compartilhar em outros sites

Pessoal, agradeço muito a ajuda de você's. Como compreendi, os nomes que utilizei para os campos realmente são muito grandes e isso compreendo que é falta de experiência minha. Sei que se eu reduzir o tamanho desses nomes, poderei ter um rendimento melhor nas buscas no banco de dados e também facilitará a manipulação na criação de códigos para inserção nas páginas; mas por enquanto, tentarei por em funcionamento essa tabela que fiz e mais tarde, após esta funcionando, a modificarei para um padrão mais apropriado.

Link para o comentário
Compartilhar em outros sites

Diff, valeu! A dica que me passou funcionou corretamente (Olhe, aprendi mais aqui do durante boa parte de quando estava fazendo o curso).

SELECT anuncio_localidade.id_anuncio, anuncio_localidade.anuncio_nome, anuncio_localidade.anuncio_descricao, anuncio_localidade.anuncio_imagem, anuncio_localidade.anuncio_tel, anuncio_localidade.anuncio_valor, comentario_local.id_coment_local, comentario_local.coment_nome, comentario_local.coment_comentario, comentario_local.coment_data, fotos_localidades.foto_titulo, fotos_localidades.foto_descricao, fotos_localidades.foto_foto, fotos_localidades.id_foto_local

FROM localidades, anuncio_localidade, comentario_local, fotos_localidades

WHERE anuncio_localidade.id_anuncio = anuncio_localidade.id_anuncio and comentario_local.id_coment_local = comentario_local.id_coment_local and fotos_localidades.id_foto_local = fotos_localidades.id_foto_local and

id_localidade = colname

colname é a variável que conterá a ID solicitada

________________________________________________________

Agora como identificarei no form para qual registro (localidade) estarei enviando determinada imagem, comentario ou anuncio?

Diff, tentei colar o codigo da tabela espelho no sql do phpmyadmin e de erro.

Link para o comentário
Compartilhar em outros sites

  • Moderador

bom.. isso você tem que jogar em um campo select .. checkbox ou radio button.. o que você achar melhor.. uma consulta que retorna as localidadades.. então na hora do cadastro você seleciona a localidade e cadastra.

por padrão.. e mais simplicidade eu recomendo usar um campo select ( combo box)

qual o erro que dá quando tentou usar o codigo da espelho? talvez você nao tenha feito na sintaxe correta.. pode ter faltado alguma coisa na hora de copiar e colar.. aqui funcionou tranquilo

Link para o comentário
Compartilhar em outros sites

Agora me explique o processo da tabela espelho. Achei muito interessante. Como faço pra cria-la, basta somente colar o codigo no SQL do PHPMYADMIN?

Em qual campo jogo o ID da localidade no form Galeria de fotos? Como você me falou, eu devo usar um campo select mas qual campo da tabela armazenará esses dados para que a relação de informações entre as tabelas?

Link para o comentário
Compartilhar em outros sites

  • Moderador

bom, a tabela espelho basea-se nas consultas em tabelas. ela é uma tabela criada com todos os campos consultados.. tornando os campos de varias tabelas a nivel de tabel.. ou seja em resumo.. todas as informaçoes que você quer em um tabelao.

para criar a tabela espelho segue uma sintaxe. copie toda sua consulta que você fez.. com a diferença de que você nao faz o filtro final especificando a id da qual você quer..

e na frente da consulta faça assim:

CREATE VIEW nomeDaView AS

Sua consulta

exemplo:

CREATE VIEW produtosVW AS

SELECT produto.nomeProduto, produto.precoProduto, produto.quantProduto, fornecedor.FornecNome, fornecedor.endereco FROM produto

INNER JOIN fornecedor ON produto.IDFornecedor = fornecedor.IDFornecedor

isso criaria uma tabela espelho que conteria os campos:

nomeProduto precoProduto quantProduto FornecNome endereco

tudo numa tabela só..

Link para o comentário
Compartilhar em outros sites

  • Moderador
E sobre a inserção de dados nas tabelas parentes? Qual campo receberá o ID da tabela mestre?

Como você havia dito, eu deveria usa campo select; mas onde armazenaria os dados obtidos pelo campo select? Que passo seguir agora?

vamos por partes..

se você diz sobre a tabela espelho.. a insersao é automática.. quando você insere dados nas tabelas originais.

você simplesmente faz o campo select e dentro dele você faz a consulta e atribui o valor da id no value do option.

exemplo:


<select name="categoria">
<option value="0">Selecione a opção</option>
<?php
include 'conexao.php';
$sql = "select idcategoria, nome from Categoria";
$dado = mysql_query($sql);
while ($linha = mysql_fetch_array($dado)){
$id = $linha["idCategoria"];
$nome = $linha["nome"];

echo "<option value='$id'> $nome </option>
}

if( isset($id)){
echo "Não há categorias ainda";
}
mysql_close($conexao);
?>
</select>

Link para o comentário
Compartilhar em outros sites

mas, pra onde envio os dados obtidos no campo select?

Criei um form direcionado à tabela localidades, quando fui inserir dados nela ocorreu o seguinte erro:

An error occurred while inserting the records.

SQL error: Cannot add or update a child row: a foreign key constraint fails (`243542`.`localidades`, CONSTRAINT `localidades_ibfk_8` FOREIGN KEY (`id_foto_local`) REFERENCES `fotos_localidades` (`id_foto_local`)).

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!