Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
> 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
> 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
> 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
> $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:
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
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
> 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
: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
i.Surfer-> Ta certo kra... boa ta aprendendo.. :) Fabão otima explicação.... :)
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?
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.
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..
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
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 ?
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.
Ok, Fabyo, muito obrigado.
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.....
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;
>
A metodologia é esta....
Como esta os campos das suas tabelas??
Post que te ajudo
>
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.....
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
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
>
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
>
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
>
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
olha se você fez semelhante ao exemplo esta correto, agora é só você testar
e esse exemplo serve para isso mesmo que você quer
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
edita o config.inc.php
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
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 ^^"
beleza , mas tiver duvidas só postar
ola amigo você me passo essa dica ae mas nao funciona aqui, mas entrei no PHPADMIN mudei la as senhas e root ai quando vo connectar o phpadmin aparece uma telinha falando do erro e o link para CONFIG.INC.PHP, ai fala que se eu clicar e a telinha aparecer em branco pq ta certo mas sempre fica fazendo isso e nao conecta nao aparece o campo pra colocar o USER nem A SENHA , fala que ta com senha mas nao aparece o campo pra colcar você pode me ajudar nisso ???
configura o config.inc.php do phpmyadmin com o usuario e senha do mysql
Caras, eu sei trabalhar com instruções SQL sucegadissimooo, meu maior problema é trabalho com o MySQLNo caso, inicia-lo e entrar nele e o usuario e a senha deleEu fui direito na pasta bin e iniciei o mysql.exe e ele abriu o prompt e criei database, tabelas, fiz consultas e etc, isso é errado ? Deveria ter iniciado, colocado senha e etc ?Abraços
ola amigo você me passo essa dica ae mas nao funciona aqui, mas entrei no PHPADMIN mudei la as senhas e root ai quando vo connectar o phpadmin aparece uma telinha falando do erro e o link para CONFIG.INC.PHP, ai fala que se eu clicar e a telinha aparecer em branco pq ta certo mas sempre fica fazendo isso e nao conecta nao aparece o campo pra colocar o USER nem A SENHA , fala que ta com senha mas nao aparece o campo pra colcar você pode me ajudar nisso ???
Ola entendi oque falo, mas o negocio eh que meu MYSQL nao tem USER nem SENHA so tem o ROOT do que ja eh o nromal vim no MYSQL, quero saber como faço pra colocar o USER e SENHA do usuario.
você pode criar via sql ou via phpmyadmin, exemplo vai no
phpmyadmin
->Privilégios
->Adicionar novo usuário
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
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