Ir para conteúdo

POWERED BY:

Arquivado

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

acvitorio

Busca avançada php mysql

Recommended Posts

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.