Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Prezados,
Como se faz para determinados registros em certo campo aparecerem não por ordem alfabética, mas por ordem de importância?
No meu banco de dados access tenho a tabela produtos, com os campos:
id
nome
linha
tipo
Então pensei em atribuir a determinados registros uma variável que definisse a ordem da importância. Mas não sei como colocar isso na query.
<%
lin = Request.QueryString("lin")
strSQL = "SELECT * FROM produtos WHERE linha="&lin&" ORDER BY tipo ASC"
Set rstSearch = cnn.Execute(strSQL)
valor_tipo = rstSearch("tipo")
if valor_tipo = "vermelho" then
importancia = "1"
elseif valor_tipo = "amarelo" then
importancia = "2"
else
importancia = "3"
end if
%>
A partir daí não sei como formar a query.
Exemplo. Se a tabela tem:
1.camisa - verde
2.camisa - amarelo
3.camisa - vermelho
Gostaria que a instrução me retornasse primeiro a cor vermelha, depois amarelo e por ultimo a verde.
Como colocar isso numa query? :unsure:
strSQL = "SELECT * FROM produtos WHERE linha=" & lin & " And tipo LIKE 'vermelho' " &_
"UNION SELECT * FROM produtos WHERE linha=" & lin & " And tipo LIKE 'amarelo' " &_
"UNION SELECT * FROM produtos WHERE linha=" & lin & " And tipo NOT IN ('vermelho','amarelo') "
Poste o resultado.
>
strSQL = "SELECT * FROM produtos WHERE linha=" & lin & " And tipo LIKE 'vermelho' " &_
"UNION SELECT * FROM produtos WHERE linha=" & lin & " And tipo LIKE 'amarelo' " &_
"UNION SELECT * FROM produtos WHERE linha=" & lin & " And tipo NOT IN ('vermelho','amarelo') "Poste o resultado.
Quase lá :rolleyes:
Eu fiz assim:
strSQL = "SELECT * FROM produtos WHERE linha=" & lin & " And tipo LIKE LIKE 'vermelho' " &_
"UNION SELECT * FROM produtos WHERE linha=" & lin & " And tipo LIKE LIKE 'amarelo' " &_
"UNION SELECT * FROM produtos WHERE linha=" & lin & " And tipo LIKE LIKE 'verde' " &_
"UNION SELECT * FROM produtos WHERE linha=" & lin & " And tipo LIKE LIKE 'preto' " &_
"UNION SELECT * FROM produtos WHERE linha=" & lin & " And tipo NOT IN ('vermelho','amarelo','verde','preto')"
Tem outras cores além dessas, mas deve seguir essa ordem:
1. vermelho
2. amarelo
3. verde
4.preto
5. qualquer outra
6. qualquer outra, etc
mascara shampoo cond, creme
O resultado da query que fiz com o exemplo do colega retornou:
1.verde
2.vermelho
3.amarelo
4.preto
Ta quase!!! Tá na pontinha da ligua... :wacko:
mais simples:
strSql = ""&_
" SELECT "&_
" TB.* "&_
" FROM "&_
" ( "&_
" SELECT "&_
" ( "&_
" CASE P.TIPO "&_
" WHEN 'verde' THEN "&_
" '1' "&_
" WHEN 'amarelo' THEN "&_
" '2' "&_
" WHEN 'vermelho' THEN "&_
" '3' "&_
" END "&_
" ) AS TIPO, "&_
" P.* "&_
" FROM "&_
" PRODUTOS P "&_
" WHERE "&_
" P.LINHA = " & lin & " "&_
" ) TB "&_
" ORDER BY "&_
" TB.TIPO ":unsure: Será?
Não entendi o que essas linhas vão fazer...
WHEN 'vermelho' THEN '3'
Não existe essa numeração. Coloquei pra mostrar a ordem.
Vou tentar entender e fazer o teste, mas acho que o exemplo do hargon está mais claro.
seria a prioridade de importancia...
>
seria a prioridade de importancia...
:huh:
error '80004005'
/produtos.asp, line 465
Erro na execução.
Vou tentar ver como fazer o do hargon colocar na ordem certa...
Usando UNION você escreveu LIKE LIKE 'preto', em todas as consultas.
A sugestão do Gaúcho parece boa também.
olha este link sobre erro 80004005 poste a linha
>
Usando UNION você escreveu LIKE LIKE 'preto', em todas as consultas.
A sugestão do Gaúcho parece boa também.
Foi erro de digitação, hargon. No codigo tem um LIKE apenas, tanto que funciona. Só não coloca na ordem que eu quero http://forum.imasters.com.br/public/style_emoticons/default/grin.gif
Eu não consegui adaptar a outra sugestão ao meu código, por isso estou usando a sua...
Mas ainda não cheguei lá. :wacko:
acho que você está fazendo em access, não deve funcionar o CASE
no like falta o %, mas sugiro usar o termo correto para utilizar o igual, o like fica muito lento
dá um response.write na sua string SQL para ver o k esta sendo passado
response.write(strSql)
response.end()
>
dá um response.write na sua string SQL para ver o k esta sendo passado
response.write(strSql)
response.end()
O banco é em access. A instrução retorna corretamente.
O exemplo que estou usando fica bem quando coloco dois itens. No terceiro item já sai da ordem. Também coloquei o % e depois o = sem o LIKE, mas o resultado é o mesmo.... Fora da ordem que eu quero... :blink:
você tendo um campo auxiliar no bd, tipo para inserir a prioridade e depois desse um ORDER BY campo
no access tem o iif no lugar do CASE(uso diferente, mas para o que você quer dá pra fazer)
strSql = ""&_
" SELECT "&_
" TB.NOME, "&_
" TB.TIPO "&_
" FROM "&_
" ( "&_
" SELECT "&_
" P.NOME, "&_
" ("&_
" IIF(UCASE(P.TIPO) = 'VERMELHO', 3, IIF(UCASE(P.TIPO) = 'AMARELO', 2, IIF(UCASE(P.TIPO) = 'VERDE', 1, 0 ) ) )"&_
" ) AS TIPO "&_
" FROM "&_
" PRODUTOS P "&_
" WHERE "&_
" P.LINHA = " & lin & " "&_
" ) TB "&_
" ORDER BY "&_
" TB.TIPO ">
no access tem o iif no lugar do CASE(uso diferente, mas para o que você quer dá pra fazer)
strSql = ""&_
" SELECT "&_
" TB.NOME, "&_
" TB.TIPO "&_
" FROM "&_
" ( "&_
" SELECT "&_
" P.NOME, "&_
" ("&_
" IIF(UCASE(P.TIPO) = 'VERMELHO', 3, IIF(UCASE(P.TIPO) = 'AMARELO', 2, IIF(UCASE(P.TIPO) = 'VERDE', 1, 0 ) ) )"&_
" ) AS TIPO "&_
" FROM "&_
" PRODUTOS P "&_
" WHERE "&_
" P.LINHA = " & lin & " "&_
" ) TB "&_
" ORDER BY "&_
" TB.TIPO "
Putz... Não foi... Eu devo estar fazendo alguma coisa errada.
Err... perguntar não ofende... TB eu coloco o nome da tabela, não é? E em P? Pq no seu exemplo você coloca o nome da tabela em algumas ocasiões e em outras coloca apenas TB? http://forum.imasters.com.br/public/style_emoticons/default/blush.gif
Mas acho que vou fazer como o xanburzum falou. Não é imoral, nem engorda... :P
TB é o nome da tabela que eu criei em tempo de execução, ela é formada do select da tabela de produtos
faça assim
strSql = ""&_
" SELECT "&_
" TB.*, "&_
" TB.TIPO "&_
" FROM "&_
" ( "&_
" SELECT "&_
" P.*, "&_
" ("&_
" IIF(UCASE(P.TIPO) = 'VERMELHO', 3, IIF(UCASE(P.TIPO) = 'AMARELO', 2, IIF(UCASE(P.TIPO) = 'VERDE', 1, 0 ) ) )"&_
" ) AS TIPO "&_
" FROM "&_
" PRODUTOS P "&_
" WHERE "&_
" P.LINHA = " & lin & " "&_
" ) TB "&_
" ORDER BY "&_
" TB.TIPO "
eu faria um CASE no sql e depois amarraria outro por fora pra poder ordenar