Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde pessoal.
trabalho com o mysql 4.014 e necessito fazer uma select que traga o registro individual de uma pessoa, que estão em uma tabela, e de outra tabela os dados que podem estar em vários registros.
Exemplo:
1- tenho uma tabela Amigos. Cada registro é único e tem 3 campos (rg/nomeamigo/datanasc).
2- tenho uma tabela filhos. podem existir vários registros para o mesmo amigo e ela
tem 4 campos (nomeamigo/nomef/datanascf/sexof). o campo "nomeamigo" é meu vínculo.
3- tenho uma tabela endereço. apenas 1 registro com x campos
Preciso que minha consulta retorne: NOMEAMIGO / nomef / datanascf / sexof / endereço
quando tento executar a select ela só me traz o primeiro registro que encontrou em cada tabela, ou seja, se tiver vários filhos só apresenta o primeiro.
TEM COMO FAZER?
gRATO.
select Amigos.,filhos.,endereço.* where amigos.nomeamigo=filhos.nomeamigo and amigos.nomeamigo=endereço.nomeamigo
Colega, meu problema não está em como vincular dados (foi só um exemplo), e sim em recuperá-los, então...
Na tabela amigos tenho:
JOÃO / MARCIA / RENATO
Na tabela filhos tenho:
JOÃO - FILHO - MARCELO
JOÃO - FILHO - RICARDO
MARCIA - FILHO - SILVIA
RENATO - FILHO - ANA
RENATO - FILHO - MARA
RENATO - FILHO - ZECA
Na tabela endereço tenho:
JOÃO - RUA AMADOR
MARCIA - AV SÃO JOÃO
RENATO - RUA MARIO LOPES
PRECISO DE UMA SELECT QUE TRAGA:
amigo / endereço / filho1 / filho2
JOÃO / RUA AMADOR / MARCELO / RICARDO
Espero ter sido claro.
Obrigado
Trazer mais de um filho em uma linha de resultado no SELECT é possível, mas para cada filho você precisaria de um LEFT JOIN, cravado na query. Isso não é automático.
Para trazer um filho por linha, você poderia fazer com:
mysql> select a.nomeamigo, e.endereco, f.nomef
-> from amigos a
-> inner join filhos f
-> on f.nomeamigo = a.nomeamigo
-> inner join endereco e
-> on e.nomeamigo = f.nomeamigo;
+-----------+----------+---------+
| nomeamigo | endereco | nomef |
+-----------+----------+---------+
| diogo | rua b | renato |
| diogo | rua b | tiago |
| felipe | rua a | marcelo |
+-----------+----------+---------+
3 rows in set (0.00 sec)
Há também a possibilidade de trazer os filhos concatenados como um só campo, veja abaixo:
mysql> select a.nomeamigo, e.endereco, group_concat(f.nomef) filhos
-> from amigos a
-> inner join filhos f
-> on f.nomeamigo = a.nomeamigo
-> inner join endereco e
-> on e.nomeamigo = f.nomeamigo
-> group by a.nomeamigo;
+-----------+----------+--------------+
| nomeamigo | endereco | filhos |
+-----------+----------+--------------+
| diogo | rua b | renato,tiago |
| felipe | rua a | marcelo |
+-----------+----------+--------------+
2 rows in set (0.00 sec)Obrigado, funcionou perfeitamente.
Meu problema agora é outro. Não consigo fazer meu programa em VB6 conectar-se ao banco de dados Mysql 5.0, o qual substitui pelo antigo (4.014).
Eu utilizava a string abaixo:
strConnect = "driver={MySQL}; server=" & mySqlIP & ";uid=" & usr_id & ";pwd=" & pass & ";database=" & meuBD & ""
Para conhecimento, antes o mysql estava em (c:\mysql) agora está em (C:\Arquivos de programas\MySQL\MySQL Server 5.0)
Veja http://forums.mysql.com/read.php?37,122353,122353#msg-122353
O cara no post diz ter conseguido com myodbc 3.51.12. E usando "Driver={MySQL Connector/ODBC v5 Driver};..."
Eclesiastes, resolvi o problema.
O Mysql 5.0 não é compatível com os conectores 2.50 ou 3.51, assim localizei, instalei e alterei minha string de conexão e deu tudo certo:
De: strConnect = "driver={MySQL}; server=" & mySqlIP & ";uid=" & usr_id & ";pwd=" & pass & ";database=" & meuBD & ""
Para: strConnect = "driver={MySQL ODBC 5.1 Driver}; server=" & mySqlIP & ";uid=" & usr_id & ";pwd=" & pass & ";database=" & meuBD & ""
valeu assim mesmo, espero ajudar alguem com esta postagem.
Um abraço.
Você não guarda o endereço dos filhos, é isso?
E outra coisa, você devia usar um campo númerico como ID. Não uma string.