Jump to content


Photo

Busca Por Tags


  • Faça o login para participar
2 replies to this topic

#1 Joao borges

Joao borges

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 02/12/2009, 16:12

Estou com uma dificuldade que paralizou completamente meu trabalho.
Ja fiz todo tipo de busca no google e não encontrei nada que pudesse me ajudar...

É o seguinte:

Tenho uma galeria de fotos que busca as fotos por TAGS e quero fazer uma forma de refinar a busca adicionando outras tags a busca.

Tenho uma tabela 'fotos' (id, arquivo) e outra tabela 'tags' (id, tag, id_foto)

Fiz desta forma (tabelas separadas) para que o usuario pudesse acrescentar ou deletar tags de uma foto. E pata gerar a TAG CLOUD.


A busca estava simples com 1 tag. (SELECT * FROM tags WHERE tag LIKE '%paisagem%')

Quero buscar as fotos que tenham a tag 'paisagem' + 'verao' + 'rj'

Se eu usar o AND ou OR nao da certo. Sei que existem varios comandos (UNION, JOIN, etc..) porem nao sei utilizar nenhum deles...

Preciso de uma ajuda URGENTE.

Desde ja agradeço.

#2 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 02/12/2009, 20:12

Você pode unir as tabelas assim:

SELECT *
FROM fotos f, tags t
WHERE f.id = t.id_foto

Quero buscar as fotos que tenham a tag 'paisagem' + 'verao' + 'rj'

Você quer pesquisar com mais de uma tag ao mesmo tempo?

Como você recebe esses valores na página para eu poder te auxiliar melhor?

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#3 Felipe Pena

Felipe Pena

    O temor do Senhor é o princípio da sabedoria

  • Ex-Admins
  • 6441 posts
  • Sexo:Masculino

Posted 02/12/2009, 21:35

Se você quer que encontre todas as tags para satisfazer a pesquisa, então você precisa adicionar ao WHERE da query principal uma subquery para verificar se a foto tem cada uma tag:

EXISTS (SELECT 1 FROM tags WHERE id_foto = fotos.id AND tag = 'TAG')

Se for para encontrar o que tem no mínimo 1 tag, fica simples.
Você pode separar cada uma com uma vírgula, e adicionar como visto abaixo, como parâmetro para FIND_IN_SET().

SELECT * FROM fotos WHERE EXISTS (SELECT 1 FROM tags WHERE id_foto = fotos.id AND FIND_IN_SET(tag, 'TAG1,TAG2'))

Felipe Pena
[...] ó terra, terra, terra; ouve a palavra do Senhor. — Jeremias 22:29




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq