Jump to content
Fórum Script Brasil
  • 0

Busca


(!_Odisséa_!)
 Share

Question

Boa noite. Eu fiz um sistema de busca mas estou com um problema. QUando pesso pra ele buscar determinado numero, e retorna alguns número corretos e outros ele traz várias vezes mudando apenas um intem, vejam o exemplo: clique aqui

Se você colocar no campo APLICAÇÂO = Pick, ele mostra uma página com alguns item normais, tipo só vem um mesmo (correto), mas logo abaixo aparece o EG 1309, e aparece várias vezes, mudando só a colona do eixo.

O código de seleção que estou usando é esse:

FROM produto,categoria, eixos

WHERE cat_gm OR cat_vw OR cat_ford LIKE '%$busca%' AND produto.id_cat = categoria.id_cat AND produto.id_eixos = eixos.id_eixos

ORDER BY n_eng

Como posso solucionar o problema, fazendo ele retornar apenas uma ves o numero?

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Não é uma boa prática manter dados duplicados no banco de dados, pois eles podem gerar muitos problemas como o seu. No caso de um estoque por exemplo, é melhor criar um campo numérico de controle de quantidade.

Bom, tente utilizar assim:

SELECT DISTINCT ....

isso vai eliminar linhas onde todos os campos escolhidos são duplicados.

Link to comment
Share on other sites

  • 0

Então a questão não é que tem campo duplicado, ele que está pegando o mesmo EG 1309 e colocando várias vezes, porque no banco só tem um EG 1309.

O engraçado, é que quando eu coloco

SELECT *
FROM produto,categoria, eixos
WHERE cat_gm LIKE '%$busca%' AND  produto.id_cat = categoria.id_cat AND produto.id_eixos = ttyy
ORDER BY n_eng

Ele funciona corretamente. Mas ele busca apenas a coluna CAT_GM, e eu precisava que ele fizesse a busca na CAT_VW, CAT_FORD, CAT_MERC, e assim por diante

Link to comment
Share on other sites

  • 0

Acho que você vai ter que utilizar uma query mais avançada com INNER JOIN. Tenta montar as tabelas no Access, criar uma consulta e pega a SQL dela.

Se não, veja mais na documentação do mysql (eu não sei utilizar INNER JOIN). Mas eu ainda acho que tem algum problema na forma de como você estruturou o banco... Você colocou uma tabela pra busca por categoria, outra por produto e outra por eixo ?

Link to comment
Share on other sites

  • 0

VOu dar uma estudade em INNER JOIN, valeu pela dica.

Eu estruturei a tabela "PRODUTOS", da seguinte maneira.

Tabela PRODUTOS possue as colunas:

- N_ENG

- N_ORI

- EIXOS

- CAT_GM

- CAT_VW

- CAT_FORD

- CAT_MERC

- enfim muitas outras.

A tabela EIXOS possue as colunas:

- 1 = BRASEIXOS

- 2 = BRASEIXOS 200

- 3 = DANA 44

- 4 = DANA 46

- enfim muitos outros eixos, mas vai ate a classificação 9

No caso da tabela PRODUTOS, ela vai consultar as outras tabelas como: EIXO, CATEGORIA, entre outras pra retornar o resulta.

Saco?

Valeu pela ajuda.

Link to comment
Share on other sites

  • 0

Muito bem.... depois de um bom estudo sobre INNER JOIN, eu consegui durante esta madrugada, resolver meu problema graças ao mbleonardo (valeu brow). E acho mais do que justo deixar aqui a solução do problema, pra outras dúvidas que possam surgir. Segue ai o código:

SELECT *
FROM produto INNER JOIN categoria on produto.id_cat = categoria.id_cat INNER JOIN eixos ON produto.id_eixos = eixos.id_eixos
WHERE cat_gm OR cat_vw OR cat_ford LIKE '%$busca%'
ORDER BY n_eng

valeu.

Link to comment
Share on other sites

  • 0

he acho que não tive tanto sucesso assim, fazendo testes e completando o código, eu preciso que a BUSCA analise 17 colunas com nomes diferentes, e quando coloco o código que discriminei acima com todos os campos ele me retorna todos os registros do banco, ou seja, mesmo que eu coloque uma dado na busca não veridico, ele retorna todas os dados, como: 9999999, se colocar no campo de busca, ele retorna todos os dados, veja o codigo:

SELECT *
FROM produto INNER JOIN categoria on produto.id_cat = categoria.id_cat INNER JOIN eixos ON produto.id_eixos = eixos.id_eixos
WHERE 
cat_gm OR 
cat_vw OR 
cat_ford OR 
cat_merc OR 
cat_agr OR 
id_vol OR 
id_fiat OR 
id_toy OR 
cat_scan OR 
cat_volv OR 
cat_cater OR 
cat_alli OR 
cat_mass OR 
cat_valm OR 
cat_agco OR 
cat_marc OR 
cat_holl 
LIKE '%$busca%'
ORDER BY n_eng

alguém sabe como me ajudar?

Link to comment
Share on other sites

  • 0

Cara, eu ainda não entendi por que você estruturou o banco dessa forma. No caso da tabela eixos, as colunas são do tipo BOOL (Sim/não) ?

Percebi que você colocou milhares de campos no WHERE, isso deixa sua consulta muito lenta. Para verificar isso utilize o EXPLAIN SELECT ...

Você poderia colocar na tabela produtos um campo EIXO e jogar estes valores para ele ("BRASEIXOS", "BRASEIXOS 200", "DANA", etc).

O mesmo acontece na tabela produtos, nos campos

- CAT_GM

- CAT_VW

- CAT_FORD

- CAT_MERC

você poderia colocar um campo "Marca" com esses dados ("GM", "VW", "FORD", etc)

esses campos poderiam ser to tipo ENUM se só pode haver uma marca por produto ou do tipo SET, que você pode escolher vários valores.

Com relação a esse problema na sua consulta, acredito que seja porque você deve especificar o LIKE em todos os campos:

... WHERE cat_gm LIKE '%$busca%' OR

cat_vw LIKE '%$busca%' OR

cat_ford LIKE '%$busca%' OR

cat_merc LIKE '%$busca%' OR

cat_agr LIKE '%$busca%' OR

...

se não ele interpreta como "verdadeiro" e sempre retorna o resultado

Link to comment
Share on other sites

  • 0

Fala Brow, Essa sua dica foi excelente, rolou direitinho. valeu.

Agora, falando um pouco do meu banco, é a primeira vez que estruturei um banco sozinho, e te confeço que me perdi em alguns momentos.

As colunas do Eixos são VAR onde eu tenho duas colunas, uma que só te números e outra que só tem o nome dos eixos. E essa coluna onde tem só os números eu relaciona com a tabela PRODUTOS onde só tem os numeros dos eixos.

E com relação as marcas, é que eu preciso em cada marca completar com um conteudo diferente, sabe? se quiser da uma olhada no site www.engrecon.com.br/pecas.htm e ai você vai ver um exemplo.

he isso. mas stou aprendendo.

valeu brow.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      151k
    • Total Posts
      649.1k
×
×
  • Create New...