Ir para conteúdo

POWERED BY:

Arquivado

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

aureo2006

Problema com SQL em Busca de multiplos campos

Recommended Posts

Eu estou tentando construir uma página de resultados de uma busca com vários campos. Eu tenho conseguido produzir relativamente bem, porém, encontro problema em um campo, que não aceita os mesmos parámetros que os demais campos.

Para verificar: no site que estou desenvolvendo existem seis campos para pesquisa. Com cinco desses campos eu consigo realizar a pesquisa tranquilo. Porém, num deles não. Me retorna dados incorretos no campo 'tipo' dependendo do parametro que eu utilizar. São seis campos, sendo que 5 usam caixas list/menu. Na construção que estou fazendo, tenho o seguinte código SQL:

SELECT *FROM motosWHERE CATEGORIA = 'colname'  AND TIPO_MOTO LIKE '%%colname5%%' AND MARCA LIKE '%%colname2%%'  AND ESTADO_MOTO = 'colname1' AND CIDADE LIKE '%%colname3%%' AND NOME_MOTO LIKE '%%colname4%%'
As variaveis estão bem definidas pois, como falei, só um dos campos dá problema , que o campo TIPO_MOTO. O problema é o seguinte: se eu inserir os valores no menu, e colocar o valor como '=', ou seja, AND TIPO_MOTO = 'colname5' ele me retorna o dado selecionado no list/menu. Só que eu gostaria de ter a opção de que, caso fosse selecionada a opção todas..., igual ao que está no campo cidade ou marca, como pode ser visto no site, ele me retornasse todos os tipos de motos e não somente aquela que corresponder a um determinado tipo, respeitando os critérios da pesquisa dos outros campos. E aí que está o problema. No campo marca e cidade eu consegui fazer isso. Mas não no campo tipo, assim como não tinha conseguido anteriormente no campo 'estado' Na página de pesquisa eu coloquei vinculado ao menu uma tabela, de onde se originam as opções do menu, e uma das opções, 'todas...' no próprio menu. O valor desta opção cuja etiqueta é todas... é em branco na página de pesquisa, ou seja, na index.php, e o valor em tempo de execução da variável, no recordset da página de resultados, caso ele me retorne o valor em branco como eu deixei no formulario de pesquisa da página index.php na opção todas..., eu coloquei /*.*. Dá certinho no campo marca e cidades, sem problema algum. Só que no campo tipo o mesmo expediente não funciona. Até fiquei na dúvida sobre o uso da expressão LIKE...se existe limite numa SQL...sempre me dá problema quando tento usar mais que três vezes esta expressão... Algo semelhante ocorreu no campo estado, em que gostaria de usar a expressão like e habilitar a opção todos..., mas fui obrigado a deixar com a opção '=', restringindo a procura como nova ou usada pois o 3° LIKE dava problema. No site fui obrigado adesabilitar as opções de procura do campo tipo, deixando habilitada a expressão todas... como unica possível de retornmo de valores enquanto tento reslver este problema. Acho estranho por que em tese os mesmos procedimentos que fizeram que fosse possível procurar no campo marca, por exemplo, deveria dar certo no campo 'tipo', mas não dá. Alguem pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estou tentando construir uma página de resultados de uma busca com vários campos. Eu tenho conseguido produzir relativamente bem, porém, encontro problema em um campo, que não aceita os mesmos parámetros que os demais campos.Para verificar: no site que estou desenvolvendo existem seis campos para pesquisa. Com cinco desses campos eu consigo realizar a pesquisa tranquilo. Porém, num deles não. Me retorna dados incorretos no campo 'tipo' dependendo do parametro que eu utilizar. São seis campos, sendo que 5 usam caixas list/menu. Na construção que estou fazendo, tenho o seguinte código SQL:

SELECT *FROM motosWHERE CATEGORIA = 'colname'  AND TIPO_MOTO LIKE '%%colname5%%' AND MARCA LIKE '%%colname2%%'  AND ESTADO_MOTO = 'colname1' AND CIDADE LIKE '%%colname3%%' AND NOME_MOTO LIKE '%%colname4%%'
As variaveis estão bem definidas pois, como falei, só um dos campos dá problema , que o campo TIPO_MOTO. O problema é o seguinte: se eu inserir os valores no menu, e colocar o valor como '=', ou seja, AND TIPO_MOTO = 'colname5' ele me retorna o dado selecionado no list/menu. Só que eu gostaria de ter a opção de que, caso fosse selecionada a opção todas..., igual ao que está no campo cidade ou marca, como pode ser visto no site, ele me retornasse todos os tipos de motos e não somente aquela que corresponder a um determinado tipo, respeitando os critérios da pesquisa dos outros campos. E aí que está o problema. No campo marca e cidade eu consegui fazer isso. Mas não no campo tipo, assim como não tinha conseguido anteriormente no campo 'estado' Na página de pesquisa eu coloquei vinculado ao menu uma tabela, de onde se originam as opções do menu, e uma das opções, 'todas...' no próprio menu. O valor desta opção cuja etiqueta é todas... é em branco na página de pesquisa, ou seja, na index.php, e o valor em tempo de execução da variável, no recordset da página de resultados, caso ele me retorne o valor em branco como eu deixei no formulario de pesquisa da página index.php na opção todas..., eu coloquei /*.*. Dá certinho no campo marca e cidades, sem problema algum. Só que no campo tipo o mesmo expediente não funciona. Até fiquei na dúvida sobre o uso da expressão LIKE...se existe limite numa SQL...sempre me dá problema quando tento usar mais que três vezes esta expressão... Algo semelhante ocorreu no campo estado, em que gostaria de usar a expressão like e habilitar a opção todos..., mas fui obrigado a deixar com a opção '=', restringindo a procura como nova ou usada pois o 3° LIKE dava problema. No site fui obrigado adesabilitar as opções de procura do campo tipo, deixando habilitada a expressão todas... como unica possível de retornmo de valores enquanto tento reslver este problema. Acho estranho por que em tese os mesmos procedimentos que fizeram que fosse possível procurar no campo marca, por exemplo, deveria dar certo no campo 'tipo', mas não dá. Alguem pode me ajudar?
bom, como vai fazer a busca por vários campos o correto seria usar o conectivo lógico OR e não AND, pois se você usar tudo AND a busca só vai ser feita quando todos forem verdadeiros, ou seja, selecionados, sua busca não iria funcionar direito, com OR basta um ser verdadeiro que ele vai funcionar.veja o exemplo:SELECT *FROM tablinkembWHERE tablinkemb.entidade LIKE 'search%' OR tablinkemb.status LIKE 'search%' OR tablinkemb.causa LIKE 'search%' OR tablinkemb.descricao LIKE '%search%'

Compartilhar este post


Link para o post
Compartilhar em outros sites

grasi....obrigado pela tentativa de ajuda mas o conectivo or não me resolve o problema...eu já tentei com ele e não deu. na realidade, todas as opções tem que ser verdadeiras....este é que é o problema... a opção 'todas... do list/menu ' é que precisa me retornar todos os registros daquele campo, mas, também, é um valor que tem que ser verdadeiro, ou seja, quando não houver a escolha de nenhum dos valores objetivos do list/menu. eu tentei o conectivo or somente no campo tipo_moto mas daí me retornou valores diferentes do existente no banco de dados...se a opção estado da moto fosse nova, me retornava 102 registros...e 187 se fosse usada, totalizando 289 registros só que tenho só 227 registros no banco de dados de teste.... isso com os demais campos tendo como conectivo and...todos com o conectivo or retornava todos os reistros do bd.

Compartilhar este post


Link para o post
Compartilhar em outros sites

JIVANDEF...Eu estou desenvolvendo uma página de resultados de uma busca em multiplos campos...que eu sei, é possível com um recordset...e num recordset, somente uma select...ou não? POderia me explicar como fazer tua sugestão, tendo em vista que estou tentando construir uma instrução SQL para uma página de resultados de uma busca, em PHP e MYSQL?

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.