acvitorio 0 Denunciar post Postado Setembro 15, 2011 Sou novo nesse forum, e gostaria de saber se podem me ajudar a sanar minha dúvida q é a seguinte: Tou desenvolvendo um sisteminha de curriculo e o usuário num determinado momento do cadastramento ele tem que selecionar(checkbox), quantos quiser(nenhum ou todos), as habilidades(expontaneo, proativo, comunicativo, etc). Ai tenho uma tabela "habilidades" onde tenho 'id_hab' e 'habilidade' como campos onde o administrador cadastra todas as habilidades q serão exibidas pro user escolher. Quando o user seleciona tenho uma tabela "habilidades_user" onde tenho 'id', 'id_user'(fk na tabela usuarios) e 'id_hab'(fk na tabela habilidades), se o cara escolher 10 habilidades ele terá 10 registros nessa tabela. Ai o administrador no painel de controle terá um sistema de busca avançada onde ele terá entre outros campos as habilidades pra selecionar, ou seja se o administrador tiver buscando curriculos de pessoas responsáveis, comunicativas, expontaneas ele selecionará os checkbox e fará a busca q deverá retornar aqueles q tem essas habilidades de maneira q o curriculo atenda todas as habilidades, mesmo tendo outras, mas q tenha todas q o adm selecionou. Ai vem a dúvida, qual a melhor maneira de se fazer isso? Tinha pensando na seguinte lógica: verifico quais habilidades ele selecionou(exemplo 3) guardo numa variavel, ai faço uma busca na tabela "habilidades_user" onde o campo "id_hab" seja = 1º habilidade Or = 2º habilidade Or = 3º habilidade ou quantas tiver. Ai ele me dará um retorno e eu verifico nesse resultado quais "id_user" se repete a quantidade de vezes = a quantidade de habilidades escolhidas. Aqueles q se repetir 3 vezes por exemplo significa q atendeu todas as habilidades. Então eu cheguei fazer assim: alimentei o banco da assim id_user-------id_hab 1---------------1 2---------------1 7---------------1 1---------------2 3---------------2 5---------------1 2---------------4 1---------------3 1---------------4 7---------------2 8---------------3 3---------------1 3---------------3 Ai eu rodando o script SELECT id_user, count(*) FROM habilidades_use WHERE id_hab IN ('1', '2', '3') GROUP BY id_user; ele me retorna o seguinte: id_user----------count(*) 1-----------------3 2-----------------1 3-----------------3 5-----------------1 7-----------------2 8-----------------1 Quando na verdade o que eu queria era q ele só retornasse o id_user "1" e "3" pois esses são os unicos que tem as habilidades "1", "2" e "3" Vcs conhecem uma melhor maneira de resolver esse problema, para que ele me retorne somente os 'id_user' somente daquele que atendem todas as habilidades requisitadas, para que depois eu com esse id_user consiga fazer um Inner join na tabela "usuarios" e consiga mostrar quais são os nomes das pessoas que atendem esses critérios? Agradeço desde já, abraços, obrigado e fique com Deus! Compartilhar este post Link para o post Compartilhar em outros sites
Neto Braghetto 3 Denunciar post Postado Setembro 23, 2011 Deixa me ver se entendi ! voce tem 3 tabelas 1 - Usuarios 2 - relacionamento entra usuario e habilidade 3 - habilidades voce quer que a busca encontre somente os usuarios que atendam as habilidades que o Administrador escolher sem registros duplicados né bom tenta isso: SELECT usuarios.CAMPO1, usuarios.CAMPO2 FROM usuarios INNER JOIN habilidades_user WHERE habilidades_user.id_hab IN ('1', '2', '3') GROUP BY usuarios.CAMPO1; Mas eu agradeceria se voce colocasse todos os campos e nomes dessas 3 tabelas aqui pra mim vizualizar melhor ! Compartilhar este post Link para o post Compartilhar em outros sites