Ir para conteúdo

Arquivado

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

Fabyo

Mini Tutorial de Mysql

Recommended Posts

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.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

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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-> Ta certo kra... boa ta aprendendo.. :) Fabão otima explicação.... :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

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

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

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

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.....

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.