Fabyo 66 Denunciar post Postado Julho 28, 2005 Pessoal vou explicar de um modo simples e eficiente como fazer um relacionamento usando uma tabela de junções, bom o que é uma junção?, na tabela junção existem 2 FKs e as duas formam uma primary key vou montar um exemplo simples de usuarios e times de futebol tabela usuarios usuarios Citar CREATE TABLE usuarios ( id_usuario smallint(5) unsigned NOT NULL auto_increment, usuario varchar(40) collate utf8_unicode_ci NOT NULL default '', PRIMARY KEY (id_usuario) ) tabela de times de futebol: times Citar CREATE TABLE times ( id_time smallint(5) unsigned NOT NULL auto_increment, time varchar(40) collate utf8_unicode_ci NOT NULL default '', PRIMARY KEY (id_time) ) tabela de junções usuario_times: usuario_time Citar CREATE TABLE usuario_time ( id_usuario smallint(5) unsigned NOT NULL default '0', id_time smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (id_usuario,id_time) ) dessa forma basta dar um select na juncao pra você saber quais times um determinado usuario torce exemplo: listar usuarios com seus repectivos times Citar $cn = mysql_connect("localhost", "usuario", "senha");mysql_select_db("sistema"); $re = mysql_query("SELECT times.time, usuarios.usuario FROM (times INNER JOIN usuario_time ON times.id_time = usuario_time.id_time) INNER JOIN usuarios ON usuario_time.id_usuario = usuarios.id_usuario"); mysql_close($cn); while($l = mysql_fetch_array($re)) { $usuario = $l["usuario"]; $time = $l["time"]; echo "Usuario $usuario torce para o $time </br>"; } resultado: Citar Usuario Fabyo torce para o Sao Paulo Usuario Adailton torce para o Palmeiras Usuario Erick torce para o Fluminense Usuario Luiz torce para o Flamengo Usuario Fernando torce para o Vasco Citar SELECT times.time, usuarios.usuarioFROM (times INNER JOIN usuario_time ON times.id_time = usuario_time.id_time) INNER JOIN usuarios ON usuario_time.id_usuario = usuarios.id_usuario explicando: Selecione o campo time da tabela times e usuario da tabela usuarios aonde a tabela times esta ligada a tabela usuario_time e o campo id_time da tabela times seja = ao campo id_time da tabela usuario_time e a tabela usuarios onde o campo id_usuario da tabela usuario_time seja igual = ao campo id_usuario da tabela usuarios banco completo: banco de teste Citar CREATE TABLE usuarios ( id_usuario smallint(5) unsigned NOT NULL auto_increment, usuario varchar(40) collate utf8_unicode_ci NOT NULL default '', PRIMARY KEY (id_usuario) ) INSERT INTO usuarios VALUES (1, 'Fabyo'); INSERT INTO usuarios VALUES (2, 'Adailton'); INSERT INTO usuarios VALUES (3, 'Erick'); INSERT INTO usuarios VALUES (4, 'Luiz'); INSERT INTO usuarios VALUES (5, 'Fernando'); CREATE TABLE times ( id_time smallint(5) unsigned NOT NULL auto_increment, time varchar(40) collate utf8_unicode_ci NOT NULL default '', PRIMARY KEY (id_time) ) INSERT INTO times VALUES (1, 'Sao Paulo'); INSERT INTO times VALUES (2, 'Santos'); INSERT INTO times VALUES (3, 'Flamengo'); INSERT INTO times VALUES (4, 'Fluminense'); INSERT INTO times VALUES (5, 'Palmeiras'); INSERT INTO times VALUES (6, 'Vasco'); INSERT INTO times VALUES (7, 'Corinthians'); CREATE TABLE usuario_time ( id_usuario smallint(5) unsigned NOT NULL default '0', id_time smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (id_usuario,id_time) ) INSERT INTO usuario_time VALUES (1, 1); INSERT INTO usuario_time VALUES (2, 5); INSERT INTO usuario_time VALUES (3, 4); INSERT INTO usuario_time VALUES (4, 3); INSERT INTO usuario_time VALUES (5, 6); obs: para quem usa mysql muito antigo nao funcionara esse banco dai nesse caso monte um banco sem o unicode qualquer duvida só perguntar Compartilhar este post Link para o post Compartilhar em outros sites
i.Surfer 0 Denunciar post Postado Agosto 15, 2005 Ola! Adailton, penso que ainda nao cheguei ao level de usar essa logica e sou do tipo com 500 selects http://forum.imasters.com.br/public/style_emoticons/default/ermm.gif , mas é por isso que estou postando aqui, para entender melhor e me desenvolver :D ! Seguinte Fabyo, tentei usar o seu exemplo como base para outro exemplo mais dificil que tinha em mente, e gostaria de saber se funcionara como o seu, caso nao, o que esta errado e o que tenho que arrumar. Chega de papo, aqui vai o codigo: 1) A tabela onde contem os alunos CREATE TABLE alunos (id INT NOT NULL auto_increment,nome varchar(40) NOT NULL default '',PRIMARY KEY (id)) 2) A tabela onde contem as materias CREATE TABLE materias (id INT NOT NULL auto_increment,nome varchar(40) NOT NULL default '',PRIMARY KEY (id)) 3) Ultima tabela, onde tem as informacoes das outras duas tabelas (campos: aluno, materia), mais a nota e qual o bimestre da nota CREATE TABLE notas (aluno INT NOT NULL default '',materia INT NOT NULL default '',bimestre INT NOT NULL default '',nota FLOAT NOT NULL default '',PRIMARY KEY (aluno,materia)) 4) O SELECT para retornar o nome do aluno, nome da materia e a nota SELECT alunos.nome, materia.nome, notas.notaFROM (materias INNER JOIN notas ON materias.id = notas.materia) INNER JOIN alunos ON notas.aluno = alunos.idWHERE notas.bimestre = $bimestre AND alunos.id = $id Explicacao do select: SELECIONAR campo 'nome' da tabela 'materias' e 'nome' da tabela 'alunos' DA tabela 'materias' LIGADA A tabela 'notas' TENDO O campo 'id' da tabela 'materias' igual ao campo 'materia' da tabela 'materias' LIGANDO A tabela 'alunos' TENDO O campo 'aluno' da tabela 'notas' igual ao campo 'id' da tabela 'alunos' ONDE O campo 'bimestre' da tabela notas seja '$bimestre' E O campo 'id' da tabela 'alunos' seja '$id' Pronto !! Espero ter feito tudo certo, aguardo a resposta de vcs!! Grato! http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
i.Surfer 0 Denunciar post Postado Agosto 24, 2005 :unsure: Gente ???? Gostaria de saber se ta certo mesmo o que fiz... :mellow: Por favor, respondam ae! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Perfect Lion 10 Denunciar post Postado Dezembro 1, 2005 i.Surfer-> Ta certo kra... boa ta aprendendo.. :) Fabão otima explicação.... :) Compartilhar este post Link para o post Compartilhar em outros sites
travado 0 Denunciar post Postado Janeiro 20, 2006 Tem umas coisas que eu não entendi..Ele pega o id para colocar os times nos usuarios? E se mais de uma pessoa torcer para o mesmo time? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Janeiro 20, 2006 mais é pra isso mesmo que serve tabela de juncao e ela faz parte do que você quer modelar modelando a mesma coisa. Só 1 foreign key modela 1 pra muitos, juncoes é muitos pra muitos. Compartilhar este post Link para o post Compartilhar em outros sites
certinho 0 Denunciar post Postado Janeiro 20, 2006 Show de bola.. fabão..Entretanto... tenho 03 tabelas semelhantes as tb utilizadas no exemplo, porém, a tb que armzena o id_usuarioe o id idiomas(similar a tb_usuario_time do exemplo) utiliza no campo id_idiomas tipo SET pois o usuario pode escolher varias opções de idiomas... os problemas ocorrem qndo comparo o id_idiomas(tipo SET) com a tb_idiomas.id_idiomas que é smalint, não retornando nada....Alguma idéia de comocomparar dados com campo SET..Grato.. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Janeiro 21, 2006 entao usando a tabela de junções você pode fazer o que você quer, nao precisa ser campo set, basta cadastrar o idioma para o mesmo usuario pessoal isso é modelagem de dados existe 1 pra muitos muitos pra 1 e muitos pra muitos, e nesse caso é muitos pra muitos dai usa-se tabela de junções que alem de ser o correto fica bem pratico o uso dele Compartilhar este post Link para o post Compartilhar em outros sites
Epyllion 0 Denunciar post Postado Janeiro 24, 2006 Fabyo, me responde uma dúvida, por favor ....Qual a diferença e/ou a desvantagem, nesse exemplo, de usar por exemplo, uma chave estrangeira na tabela de usuários referenciando diretamente o id do time na tabela dos times ? Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Janeiro 24, 2006 a questao é que pra certas coisas nao da uma tabela de junções faz parte de um banco de dados bem modelado. se você fizer só com FK você nao ta modelando a mesma coisa. Só 1 foreign key modela 1 pra muitos, juncoes é muitos pra muitos. cuidado pra nao modelar errado.. se é muitos pra muitos que você precisa nao tem como tirar. Compartilhar este post Link para o post Compartilhar em outros sites
Epyllion 0 Denunciar post Postado Janeiro 24, 2006 Ok, Fabyo, muito obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
PHILLIPPE 0 Denunciar post Postado Fevereiro 3, 2006 beleza Galera.... To precisando muiot aprender esse lance.... de relacionamento de tables.... sou inicainte em BD e to tendo dificuldades pois os tutos que achei são bem cpmplexos.... quero saber o seguintes... Esse tuto serve para o seguinte caso.... Preciso relacionar a Table "Veiculos" a tabela acessórios, para exbir na página quais acessórios determinado veiculo tem... certo.... Se puderem me ajudar.... Um abraço, Felipe Esteves Xtyle Digital Studio PS: Preciso participar mais desse forum..... Compartilhar este post Link para o post Compartilhar em outros sites
PHILLIPPE 0 Denunciar post Postado Fevereiro 3, 2006 Pow vlw.... Abaixo estão as tres tabelas que criei analisando o tuto, meu problema está em como e onde fazer o SELEC.... pode ser no dream e como ele é feito.... qual o conceito.... CREATE TABLE `acessorios` ( `id_acess` int(6) NOT NULL auto_increment, `acessorios` varchar(100) NOT NULL default '', PRIMARY KEY (`id_acess`) ) TYPE=MyISAM AUTO_INCREMENT=6 ; CREATE TABLE `veiculos` ( `id_veiculos` int(8) NOT NULL auto_increment, `veiculo` varchar(50) NOT NULL default '', `fabricante` varchar(50) NOT NULL default '', `valor` varchar(12) NOT NULL default '', `financiamento` varchar(10) NOT NULL default '', `ano` varchar(4) NOT NULL default '', `modelo` varchar(4) NOT NULL default '', `km` varchar(12) NOT NULL default '', `portas` char(2) NOT NULL default '', `motor` varchar(50) NOT NULL default '', `cor` varchar(50) NOT NULL default '', `acessorios` varchar(100) NOT NULL default '', `miniatura_1` varchar(100) NOT NULL default '', `foto_1` varchar(100) NOT NULL default '', `miniatura_2` varchar(100) NOT NULL default '', `foto_2` varchar(100) NOT NULL default '', `miniatura_3` varchar(100) NOT NULL default '', `foto_3` varchar(100) NOT NULL default '', PRIMARY KEY (`id_veiculos`,`veiculo`), FULLTEXT KEY `acessorios` (`acessorios`), FULLTEXT KEY `motor` (`motor`) ) TYPE=MyISAM AUTO_INCREMENT=3 ; CREATE TABLE `veiculos_acessorios` ( `id_veiculos` int(5) unsigned NOT NULL default '0', `id_acessorios` int(5) unsigned NOT NULL default '0', PRIMARY KEY (`id_veiculos`,`id_acessorios`) ) TYPE=MyISAM; Adailton disse: A metodologia é esta.... Como esta os campos das suas tabelas?? Post que te ajudo PHILLIPPE disse: beleza Galera.... To precisando muiot aprender esse lance.... de relacionamento de tables.... sou inicainte em BD e to tendo dificuldades pois os tutos que achei são bem cpmplexos.... quero saber o seguintes... Esse tuto serve para o seguinte caso.... Preciso relacionar a Table "Veiculos" a tabela acessórios, para exbir na página quais acessórios determinado veiculo tem... certo.... Se puderem me ajudar.... Um abraço, Felipe Esteves Xtyle Digital Studio PS: Preciso participar mais desse forum..... Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Fevereiro 3, 2006 qual sua duvida? você perguntou se poderia fazer o select no dream? nao cara use um programa de verdade, use: MySQLQueryBrowser MyManager DBTools Manager Professional Compartilhar este post Link para o post Compartilhar em outros sites
PHILLIPPE 0 Denunciar post Postado Fevereiro 3, 2006 Fabyo, Na verdade, minha dúvida não é se posso fazer o SELECT no dream, e sim como fazer o SELECT o programa pouco importa, preciso quie ele funcione, só isso. Preciso relacionar a Tabela Veiculos a Tabela Acessorios, fazendo com que cada veiculo cadstrado possua determinados acessorios, correto. Como faze-lo???? Eis a minha dúvida, Seguindo seu modelo, criei as tabela postadas acima e depois criei o seguinte SELECT SELECT acessorios.acessorios, veiculos.veiculo FROM(veiculos INNER JOIN veiculos_acessorios ON veiculos.id_veiculos = veiculos_acessorios.id_veiculos) INNER JOIN acessorios ON veiculos_acessorios.id_acess = veiculos.id_acess Está correto??? essa é a minha dúvida, quero entender para que server essas funções que você colocou, isso é que não sei... Vlw.... Felipe Esteves Xtyle Digital Studio Fabyo disse: qual sua duvida? você perguntou se poderia fazer o select no dream? nao cara use um programa de verdade, use: MySQLQueryBrowser MyManager DBTools Manager Professional Se alguém que tenha MSN estiver disposto a me ajudar, ficarei muito agradecido... Pode me adicionar... MSN: felipe@xtyleds.com Vlw... Abraços.... Felipe Esteves Xtyle Digital Studio PHILLIPPE disse: Fabyo, Na verdade, minha dúvida não é se posso fazer o SELECT no dream, e sim como fazer o SELECT o programa pouco importa, preciso quie ele funcione, só isso. Preciso relacionar a Tabela Veiculos a Tabela Acessorios, fazendo com que cada veiculo cadstrado possua determinados acessorios, correto. Como faze-lo???? Eis a minha dúvida, Seguindo seu modelo, criei as tabela postadas acima e depois criei o seguinte SELECT SELECT acessorios.acessorios, veiculos.veiculo FROM(veiculos INNER JOIN veiculos_acessorios ON veiculos.id_veiculos = veiculos_acessorios.id_veiculos) INNER JOIN acessorios ON veiculos_acessorios.id_acess = veiculos.id_acess Está correto??? essa é a minha dúvida, quero entender para que server essas funções que você colocou, isso é que não sei... Vlw.... Felipe Esteves Xtyle Digital Studio Fabyo disse: qual sua duvida? você perguntou se poderia fazer o select no dream? nao cara use um programa de verdade, use: MySQLQueryBrowser MyManager DBTools Manager Professional Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Fevereiro 3, 2006 olha se você fez semelhante ao exemplo esta correto, agora é só você testar e esse exemplo serve para isso mesmo que você quer Compartilhar este post Link para o post Compartilhar em outros sites
espanka 0 Denunciar post Postado Fevereiro 3, 2006 ola galera, eu queria saber como e onde eu façao pra mudar a senha do MYSQL, tenho ele instalado perfeitamento entro no PHPadmin mas nao sei fazer nada, nem onde eu vo pra altarar a senhas e fazer a connecçao com o PHP para o MYSQl se alguem poder me ajuda vo fica muito , GRATO valew galera Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Fevereiro 3, 2006 edita o config.inc.php Compartilhar este post Link para o post Compartilhar em outros sites
espanka 0 Denunciar post Postado Fevereiro 4, 2006 ola fabyo, meu MYSQL ta com a senha ROOT e mas nada e nao sei onde muda você falo no CONFIG.INC.PHP mas nao tem aqui , ai tenteni dentro da pasta PHPADMIN, la tem uns arquivos semenhante segue abaixo CONFIG.DEFAULT.PHPCONFIG.HEADER.PHPCONFIG.FOOTER.PHP no php admin so tem esses 3 arquivos entao se for ai mesmo que tem que mudar as senhas, creio eu que tenho que criar um arquivo com nome CONFIG.INC.PHP e colocar junto com esses. mas ai eu queria que você me passasse os cogidos qeu coloco dentro desse arquivo, pra mudar o ROOT e colocar so a SENHA DO USER e o USUARIO.se nao fose abusar gostaria que me ensinasse tambem como criar tabela, alguam coisa assim basico so pramim começar. to vendo o FELIPHE ai com uns exemplos mas nao sei onde coloco esses codigos pra criar as tabelas se pode me ajudar. ae brow fico muito agradecido pela paciencia que ta teno comigo e as ajuda, no começo to meio garrado mas depois que tiver o basico legal. eu vo avançar legal pq tenho muito tempo pra fica aqui estudando, mas valew pela força abraço fuizzzzz Compartilhar este post Link para o post Compartilhar em outros sites
Leandro - xd 0 Denunciar post Postado Fevereiro 5, 2006 Poxa fabyo, muito bom... vou por meu primo para tentar fazer isso sozinho, pois ta difícil aqui... e esse tuto ai, quem não der conta de fazer vai estar precisando de uma boa checada na cabeça né, pq ta muuuuito fácil ^^" Compartilhar este post Link para o post Compartilhar em outros sites