Ir para conteúdo

POWERED BY:

Arquivado

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

elton73ssa

ORDER BY por importância

Recommended Posts

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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 "

Compartilhar este post


Link para o post
Compartilhar em outros sites

: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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

seria a prioridade de importancia...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Usando UNION você escreveu LIKE LIKE 'preto', em todas as consultas.

 

A sugestão do Gaúcho parece boa também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este link sobre erro 80004005 poste a linha

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um response.write na sua string SQL para ver o k esta sendo passado

response.write(strSql)
response.end()

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

Compartilhar este post


Link para o post
Compartilhar em outros sites

você tendo um campo auxiliar no bd, tipo para inserir a prioridade e depois desse um ORDER BY campo

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 "

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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 "
informe o erro quando ocorrer pra facilitar nas respostas

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.