Ir para conteúdo

POWERED BY:

Arquivado

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

SkyWalker.TO

Consulta avançada

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

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.