Ir para conteúdo

POWERED BY:

Arquivado

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

Web 1

Selecionar resultado

Recommended Posts

Ola pessoal estou com um problema fiz uma base onde em uma coluna eu cadastro o Ids das categorias de determinados produtos, porem, registro mais de uma categoria separada por ",". mas no momento de selecionar os mesmos esta ocorrendo isso

 

se tem esse resultado no campo

1,20,30

 

ele esta selecionando os produtos com categorias de numero "2"

 

estou usando o codigo abaixo para a busca

 

ColunaId like '%"&Replace(CategoriaId, " ", "%")&"%'

ColunaId like '%"&CategoriaId&"%'

ColunaId = "&CategoriaId&"

 

mas nenhuma delas esta dando certo, ambas selecionando confusos os códigos.

 

Como ficaria a sintaxe para esta rotina?

Compartilhar este post


Link para o post
Compartilhar em outros sites

antes de executar a SQL , separe os dados, use o SPLIT e depois faça um loop na SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

poxa xanburzum não sei trabalhar com SPLIT minha logica é essa.

 

categoria

categoriaID

categoriaNOME

 

produto

produtoCATEGORIA

produtoNOME

 

no momento de cadastro cadastro na coluna produtoCATEGORIA os valores "1,20,30"

 

mas no resgate para selecionar os determinados produtos por exemplo CATEGORIA "2"

ele esta selecionando os produtos que contem por exemplo "20" por ler qualquer valor ja tentei usar

cint(variavel), mesmo assim não esta funcionando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Split é usado quando precisamos transformar uma string em um array de strings através de um delimitador em comum.

 

Sintaxe: Split([string],[delimitador])

 

Complicado?? Veja o exemplo:

 

ex.:

 

Dim texto, arrayTexto, i

texto = "meu,teste,deu,certo"

arrayTexto = Split(texto,",")

For i = 0 to Ubound(arrayTexto)

Response.Write(arrayTexto(i) & "<br />")

Next

 

 

Na primeira linha criei na memória as 3 variáveis: texto, arrayTexto e i.

Na segunda linha eu atribuo a string "meu,teste,deu,certo" à variável ´texto´. Observe que cada palavra está separada por uma vírgula, ela será o nosso ´delimitador´ na hora de aplicar a função Split.

Agora na terceira e mais importante linha é que está a ´mágica´ rsrs eu atribuo à variável arrayTexto o resultado da função Split, que é um array onde cada posição corresponde a um intervalo entre cada vírgula na nossa string inicial.

E o resultado será este:

 

arrayTexto(0) = "meu"

arrayTexto(1) = "teste"

arrayTexto(2) = "deu"

arrayTexto(3) = "certo"

 

Para exibi-lo na tela eu uso o laço FOR, iniciando em 0 (todo array em asp inicia na posição zero), e percorro o array até sua última posição, que eu obtenho através da função Ubound (explicarei mais sobre essa função num post não muito distante rsrs).

Response.Write(arrayTexto(i) & "<br />")

 

Em cada iteração do loop eu executo o comando para imprimir na tela o valor correspondente à posição corrente do array no loop.

 

Obs.: Uma das aplicações práticas para a função Split é no tratamento de campos de um formulários que possuem um mesmo nome (propositalmente), pois retornam uma sequência dos valores numa string, separados por vírgulas.

 

Obs 2.: Podem ser usados quaisquer outros caracteres como delimitadores, desde que não prejudiquem a leitura dos valores do array.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito boa a explicação sore SPLIT, porem creio que não seja o meu caso, ou não me expressei direito no meu problema, não haverá necessidade de SPLIT na minha necessidade.

 

veja bem, eu tenho essa estrutura.

Eu gravo em um campo os valores "1,20,22"

 

numa string eu jogo o valor que quero recuperar por exemplo "20"

 

ele esta listando todos os campos que possuim o numero "2" visto que teria que ser exato, listar somente os que contem o numero "20", compreendeu?

 

Creio que isso consiste na string de busca no banco.

 

Estou usando assim

 

CategoriaProdutoId=20

 

sql = "SELECT * FROM produto where categoriaID like '%"&CategoriaProdutoId&"%'"

 

porem esta listando todos que possuim o numero "2" nos campos.

 

ja tentei assim tambem.

 

sql = "SELECT * FROM produto where categoriaID like '%"&Replace(CategoriaProdutoId, " ", "%")&"%'"

 

O problema esta na string de seleção dos produtos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso é por causa do operador LIKE do SQL, ele pega tudo que contenha 20

Compartilhar este post


Link para o post
Compartilhar em outros sites

apenas remova o operador LIKE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou usando assim agora

 

sql = "SELECT * FROM produto where categoriaID = "&CategoriaProdutoId&""

 

funcionou, porem com um erro!

 

ele encontra somente os ids, que estao por primeiro no campo, exemplo:

 

se num campo tem os seguintes valores "20,51,70"

 

ele esta achando somente o valor "20"

 

se eu busco por "51" ele nao lista

Compartilhar este post


Link para o post
Compartilhar em outros sites

recupere os valores e depois dê um SPLIT na variavel ele vai quebrar os valores em um array , dae você faz um loop dos valores na sua string SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei que aqui é um forum de ajuda e não de favores, rsrs, mas como não sei muito trablahar com SPLIT seria isso

 

Dim categId, arrayTexto, i

categId= "1,20,51,70"

arrayTexto = Split(categId,",")

For i = 0 to Ubound(arrayTexto)

Response.Write(arrayTexto(i) & "<br />")

Next

 

?

 

e como jogo isso na string depois?

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este exemplo, onde uso para fazer um INSERT

 

if qtd_produtos = "" then
Response.write("erro..."
response.redirect("outra_pagina.asp")
else
qtd_produtos = split(Request.Form("qtd_produtos"),",")
if qtd_produtos = ""
produtos= Split(Request.Form("produtos"), ",")

For i = 1 To Request.Form("produtos").Count

Response.write request.form("produtos")(i)&"<BR>" & request.form("qtd_produtos")(i)&"<BR>"
SQL = "INSERT INTO lista (lista_prodID,lista_quant) Values ('"&request.form("produtos")(i)&"','"&request.form("qtd_produtos")(i)&"')"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo!

 

meu código abaixo o negrito seria onde resgataria o valor com SPLIT, é isso?

se sim como ficaria?

 

<%

CategId = Request.Querystring("CategId")

 

sql = "SELECT * FROM produto where ProdCategId = "&CategId&""

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prezado Amigo,

 

Embora a solucao proposta resolva o seu caso, sendo apenas uma questao de logica.

 

Vou te dar um conselho:

 

Refaça sua estrutura de banco de dados que estah errada, da uma lida sobre formas normais, o atributo categoria e produto devem ficar numa tabela somente para eles, visto que um produto pode ser cadastrado em varias categorias. (ficaria produtoID - CatID)

 

Dessa forma sua aplicacao teria uma logica muito mais correta e simples de fazer.

 

Soh uma opniao.

 

Http://www.sisimobi.com.br

 

Um abracao ai !

Compartilhar este post


Link para o post
Compartilhar em outros sites

você precisa ter uma relacionamento entre as tabelas, na verdade, a impôrtancia de uma modelagem de dados bem definida até os mínimos detalhes, como os campos de relacionamentos, um velho ditado diz, que um relacionamento bem definido é a alma do aplicativo, pois daí saem todas as consultas e operações com o banco, influenciando diretamente na otimização e performance do aplicativo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo vou estudar um pouco sobre, mas no momento precisaria de uma solução para este caso.

Se alguém souber como posso fazer para este caso acima por favor pessoal, aguardo ajuda.

 

 

 

porem abordando o assunto que sugeriu seria isso

 

tabela_produto

produto_id

produto_nome

 

tabela_categoria

categoria_id

categoria_nome

 

tabela_relacionamento

produto_id

categoria_id

 

Seria isso?

 

e eu gravaria na tabela_produto o ID da tabela_relacionamento?

Compartilhar este post


Link para o post
Compartilhar em outros sites

usa um INNER JOIN

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voltei com o mesmo problema pessoal.

 

Tenho uma base com muitos registros e preciso solucionar este problema. até que eu remodele ele.

 

Tenho as seguintes tabelas

 

Produto

ProdId

ProdCategorias - Aqui eu cadastro os id separados por , resultados registrados assim 150,157,200,204

ProdNome

 

Categorias

ProdId - esses são os ids cadastrados acima

ProdNome

 

Na consulta que faço na coluna ProdCategorias com like ele acaba exibindo resultados semelhantes.

 

Exemplo faço a consulta para exibir produtos "200" ele acaba pegando os valores que contem "20".

 

Estou selecionando assim

 

sql = "SELECT * FROM produto where ProdCategorias like ("&CategId&")"

 

Qual seria uma solução provisoria pra isso?

 

Obrigado pessoal!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo,

 

Seu problema pode ser resolvido usando o operador IN do SQL.

Suponhamos que a variável CategID tenha o valor "1, 20, 23, 30"

 

seu SELECT deve ficar desta forma:

 

SELECT * FROM produto where ProdCategId IN (1, 20, 23, 30)  

 

ou, em ASP:

 

sSQL = "SELECT * FROM Produto WHERE ProdCategId IN (" & CategID & ");"

 

 

Atenciosamente,

 

Anderson Schmitt.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Anderson tentei usar o IN, porem ocorre o seguinte.

 

sSQL = "SELECT * FROM Produto WHERE ProdCategId IN (" & CategID & ");"

 

O meu CategID tem apenas um valor "200" por exemplo. Ele nao lista quando o "200" esta no meio da registro.

 

Tenho produtos com as categorias cadastradas assim "120,158,200,204"

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.