Ir para conteúdo

Arquivado

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

Marcello Ruoppolo

Sql

Recommended Posts

E ai galera td certo??

 

Eu precisava fazer um filtro por categoria porém o meu sistema tem 2 tipos de usuários os que tem acesso a base de dados com informações do sistema e os que não tem, para estes que tem além de eles terem acesso aos dados cadastrados por eles mesmos, eles tbm tem acesso aos dados públicos e os que não tem possuem acesso apenas aos dados cadastrados por eles mesmo.

 

Ai eu estou fazendo um filtro de categorias e fiquei com uma dúvida na query, bom eu montei a seguinte query:

 

SELECT o.intOrganizadorEventoID, o.strOrganizadorEventoNome, o.strPublic, o.intOrganizadoresCategoriaID, o.intEstadoID, o.intCidadeID, c.intOrganizadoresCategoriaID, c.strOrganizadoresCategoriaNome, e.intEstadoID, e.strEstadoUF, m.intCidadeID, m.strCidadeNome FROM tb_organizadores_eventos AS o INNER JOIN tb_organizadores_categorias AS c ON o.intOrganizadoresCategoriaID = c.intOrganizadoresCategoriaID INNER JOIN tb_estados AS e ON o.intEstadoID = e.intEstadoID INNER JOIN tb_cidades AS m ON o.intCidadeID = m.intCidadeID

 

O importante é apenas o final após o where:

 

WHERE o.intOrganizadoresCategoriaID = '$categoriafiltro' AND o.intUserID = '$user' AND o.strPublic = 's'

 

Se eu deixo do jeito que esta ele retorna pra mim apenas os resultados onde a categoria seja igual a do filtro, isso esta certo, porém ele busca apenas registros onde o usuário seja igual a mim e o dado seja listado como público o que não pode acontecer, pq os dados públicos são registrados pelo sistema então eles não tem usuario associdos. Então eu pensei em usar o OR

 

WHERE o.intOrganizadoresCategoriaID = '$categoriafiltro' AND o.intUserID = '$user' OR o.strPublic = 's'

 

Ai ele pega dados que tenham sido cadastrados por mim ou dados públicos, o que esta certo, porém, ele ignora o filtro por categoria, como eu posso montar esta query??

 

Valew galera :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

WHERE (o.intOrganizadoresCategoriaID = '$categoriafiltro') AND (o.intUserID = '$user' OR o.strPublic = 's')

Isso irá forçar a buscar com a categoria informada e retornará dados se for igual o id do usuário ou se for público.


O AND tem precedência ao OR e como você não colocou parênteses, o que está acontecendo é isso:

(o.intOrganizadoresCategoriaID = '$categoriafiltro' AND o.intUserID = '$user') OR o.strPublic = 's'

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.