Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá.
Caso:
Tenho 2 tabelas: Noticias e Tags, cada notícia tem N tags.
Problema:
Queria saber se tem como retornar a notícia e todas as tags relativas em apenas uma consulta.
eu quero evitar de fazer uma consulta para cada entrada no loop.
Obrigado.
>
Opa,
Faça uma INNER JOIN (junção interna).
SELECT a.noticia, b.tag
FROM NOTICIAS AS A NNER JOIN TAGS AS B
ON A.PK = B.FK
Qualquer dúvida, continue postando! http://forum.imasters.com.br/public/style_emoticons/default/natal_smile.gif
você não entendeu o problema...
imagina que eu tenho 10 notícias, cada uma com 10 tags, usando o inner join meu recordset ficaria com 100 registros, repetindo os campos da noticia para cada TAG... e isso no final seria mais pesado do que uma consulta para cada entrada no laço.
preciso de algo q me retorne assim:
id, titulo, noticia, tags
1, 'teste', 'bla bla', 'economia, turismo, cultura'
em vez de:
id, titulo, noticia, tag
1, 'teste', 'bla bla', 'economia'
1, 'teste', 'bla bla', 'turismo'
1, 'teste', 'bla bla', 'cultura'
Não sei se é possível... mas se fosse seria muito util.
[]'s
eh sim amigo.., eh mais simples do que parece..., basta usar a função de agrupamento que faz concatenação no mysql:
SELECT n.noticia,
GROUP_CONCAT(DISTINCT t.tag SEPARATOR ",")
FROM noticias AS n,tags AS t
GROUP BY n.noticia
você pode mudar o separador, ordenar DESC, ASC, usar distinct etc..., só olhar no manual do mysql a função group_concat...
espero ter ajudado...
iaew galera beleza !??
tenhu uma duvida pareceida
soh q no meu caso o relacionamento eh d n pra n
tenhu uma tabela usuario i uma telefone
onde um usuario pod ter varios telefones e um telefone pode
pertencer a varios usuarios
ai ia ser mostrado da forma descrita anteriormente
usuario - tel1, tel2, tel3... etc
esse codigo ai acima vale pra isso?
...
sim... rs
eu estou criando no dbdesigner
ai ele me deu uma nova tabela para isso..
terial algo d especial para fazer nessa consulta???
como seria??
vlwW
se o relacionamento eh n pra n tem q criar uma tabela de relacionamento mesmo...,
dah pra usar a mesma função:
SELECT u.nome,GROUP_CONCAT(DISTINCT t.telefone)
FROM usuarios AS u
INNER JOIN usuarios_telefones AS ut
ON u.id_usuario=ut.id_usuario
INNER JOIN telefones AS t
ON ut.id_telefone=t.id_telefone
GROUP BY u.id_usuario
veja ae se entende...
huauhauhauah http://forum.imasters.com.br/public/style_emoticons/default/grin.gif
tem soh como dah um tok mais ou menos
q eh tabela i u ki eh campu nese select :P
i kal eh o campo da 3ª tabela? http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif
rs
confessu ki mi perdi um pokim
rs
vlwW
>
huauhauhauah http://forum.imasters.com.br/public/style_emoticons/default/grin.gif
tem soh como dah um tok mais ou menos
q eh tabela i u ki eh campu nese select :P
i kal eh o campo da 3ª tabela? http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif
rs
confessu ki mi perdi um pokim
rs
vlwW
Kra, tem certeza que quer criar uma tabela para guardar telefones?.. mas ok:
essas são as tabelas:
pessoa (id, nome, email)
telefone(id, numero)
pessoa_telefone(id_pessoa, id_telefone)
ex:
pessoa
1 | andre | bla@bla.com
2 | joao | asd@asd.com
telefones
1 | 222 2222
2 | 222 3333
pessoa_telefone
1 | 2 (pessoa 1 possui o telefone 2) (telefone 2 pertence a pessoa 1)
2 | 1 (pessoa 2 possui o telefone 1) (telefone 1 pertence a pessoa 2)
2 | 2 (pessoa 2 tbm possui o telefone 2) (telefone 2 pertence a pessoa 2)
simples assim...
Mas minha dica eh criar soh duas tabelas e um relacionamento 1xn
pessoa (id, nome, email)
pessoa_telefone (id_pessoa, telefone)
ex.
pessoa
1 | andre | bla@bla.com
2 | joao | asd@asd.com
pessoa_telefone
1 | 222 2222
2 | 222 2222
2 | 222 3333
mais simples naum?
[]'s
naum naum SkyWalker...
issu aew tou ligadu...
:P
num intendi direito o selecte
SELECT u.nome,GROUP_CONCAT(DISTINCT t.telefone)
FROM usuarios AS u
INNER JOIN usuarios_telefones AS ut
ON u.id_usuario=ut.id_usuario
INNER JOIN telefones AS t
ON ut.id_telefone=t.id_telefone
GROUP BY u.id_usuario
tipo 'u' eh a tabela usuario i 'nome' eh o campo desta tabela
't' tabela telefone i 'telefone' o campo
ai aparece 'from usuarios' rs apartir dai me perdi todim
rs http://forum.imasters.com.br/public/style_emoticons/default/pinch.gif
i esse lance de telefone eh som um exemplo pra praticar um pokim
poderia ser varias outras coisas http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
vlwW
>
naum naum SkyWalker...
issu aew tou ligadu...
:P
num intendi direito o selecte
SELECT u.nome,GROUP_CONCAT(DISTINCT t.telefone)
FROM usuarios AS u
INNER JOIN usuarios_telefones AS ut
ON u.id_usuario=ut.id_usuario
INNER JOIN telefones AS t
ON ut.id_telefone=t.id_telefone
GROUP BY u.id_usuario
tipo 'u' eh a tabela usuario i 'nome' eh o campo desta tabela
't' tabela telefone i 'telefone' o campo
ai aparece 'from usuarios' rs apartir dai me perdi todim
rs http://forum.imasters.com.br/public/style_emoticons/default/pinch.gif
i esse lance de telefone eh som um exemplo pra praticar um pokim
poderia ser varias outras coisas http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
vlwW
Após o nome da tabela num comando SQL, você pode opcionalmente criar um apelido para tal tabela e usá-lo na query. Ele pode vir logo após a query (e.g. FROM foobar foo), ou após o 'AS', como foi usado acima.
Opa,
Faça uma INNER JOIN (junção interna).
SELECT a.noticia, b.tag
FROM NOTICIAS AS A NNER JOIN TAGS AS B
ON A.PK = B.FK
Qualquer dúvida, continue postando! http://forum.imasters.com.br/public/style_emoticons/default/natal_smile.gif