4D v14.3ORDER BY |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v14.3
ORDER BY
|
ORDER BY ( {tabela ;}{ campo }{; > ou < }{; campo2 ; > ou <2 ; ... ; campoN ; > ou <N}{; *} ) | ||||||||
Parâmetro | Tipo | Descrição | ||||||
tabela | Tabela |
![]() |
Tabela na qual vai ordenar os registros selecionados, ou tabela Padrão, se omitido | |||||
campo | Campo |
![]() |
Campo no qual estabelecer a ordem para cada nível | |||||
> ou < | Operador |
![]() |
Direção da ordem para cada nível: > para ordenar em ordem ascendente, ou < para ordenar em ordem descendente | |||||
* | Operador |
![]() |
Continuar a bandeira de ordem | |||||
ORDER BY ordena (reordena) os registros da seleção atual de tabela para o processo atual. Quando tiver realizada a ordenação, o primeiro registro da nova seleção atual se converte no registro atual.
Se omite o parâmetro tabela, o comando se aplica à tabela por padrão, se tiver definido uma tabela por padrão. Se não, 4D utiliza a tabela do primeiro campo passado como parâmetro. Se não passa um parâmetro e se não foi definido uma tabela por padrão, é devolvido um erro.
Se não especifica o parâmetro campo, nem os parâmetros > ou < ou *, ORDER BY mostra a caixa de diálogo Ordenar de 4D para tabela. Esta é a caixa de diálogo do editor:
Para maior informação sobre a utilização do editor de ordenação, consulte o Manual de desenho de 4D.
O usuário construí a ordenação, depois clica no botão ordenar para realizar a ordenação. Se a ordenação é realizada corretamente, a variável OK toma o valor 1. Se o usuário clica em Cancelar, ORDER BY termina sem realizar a ordenação, e a variável OK toma o valor 0 (zero).
O exemplo a seguir mostra a caixa de diálogo Ordenar para a tabela [Produtos]:
ORDER BY([Produtos])
O exemplo a seguir mostra a caixa de diálogo Ordenar para a tabela padrão (se tiver sido definida):
ORDER BY
Se especifica os parâmetros campo e > ou < , a caixa de diálogo Ordenar não é apresentada e a ordenação é definida por programação. Pode ordenar a seleção em um ou vários níveis. Para cada nível de ordenação, você especifica um campo no parâmetro campo e uma ordem em > ou <. Se passa o parâmetro “maior que” (>), a ordem é ascendente. Se passa o símbolo “menor que” (<), a ordem é descendente.
O exemplo a seguir ordena a seleção atual de [Produtos] por nome em ordem ascendente:
ORDER BY([Produtos];[Produtos]Nome;>)
O exemplo ordena a seleção atual de [Produtos] por nome em ordem descendente:
ORDER BY([Produtos];[Produtos]Nome;<)
A linha seguinte ordena a seleção de [Produtos] por tipo e preço em ordem ascendente para ambos os níveis:
ORDER BY([Produtos];[Produtos]Tipo;>;[Produtos]Preço;>)
O exemplo ordena a seleção atual de [Produtos] por tipo e preço em ordem descendente para ambos níveis:
ORDER BY([Produtos];[Produtos]Tipo;<;[Produtos]Preço;<)
O exemplo a seguir ordena a seleção atual de [Produtos] por tipo em ordem ascendente e por preço em ordem descendente:
ORDER BY([Produtos];[Produtos]Tipo;>;[Produtos]Preço;<)
O exemplo a seguir ordena a seleção atual de [Produtos] por tipo em ordem descendente e por preço em ordem ascendente:
ORDER BY([Produtos];[Produtos]Tipo;<;[Produtos]Preço;>)
Se omite o parâmetro de ordenação > o <, automaticamente a ordem é ascendente.
O exemplo a seguir ordena a seleção atual de [Produtos] por nome em ordem ascendente:
ORDER BY([Produtos];[Produtos]Nome)
Se só for especificado um campo (um nível de ordenação) e estiver indexado, o índice é utilizado para a ordenação. Se o campo não estiver indexado ou se houver mais de um campo,a ordenação se realiza de maneira sequêncial (exceto no caso dos índices compostos). O campo pode pertencer à tabela da seleção que estiver sendo reordenada ou a uma tabela Um relacionada a tabela com uma relação manual ou automática. (Lembre, a tabela à qual se aplica ORDER BY deve ser a tabela Muitos). Neste caso, a ordenação é sempre sequêncial.
Se os campos ordenados são incluídos em um índice composto, ORDER BY utiliza o índice para a ordenação.
O exemplo a seguir realiza uma ordenação indexada se o campo [Produtos]Nome está indexado:
ORDER BY([Produtos];[Produtos]Nome;>)
O exemplo a seguir realiza uma ordenação sequêncial, sem importar se os campos estão indexados:
ORDER BY([Produtos];[Produtos]Tipo;>;[Produtos]Preço;>)
O exemplo a seguir realiza uma ordenação sequêncial utilizando um campo relacionado:
ORDER BY([Faturas];[Empresas]Nome;>) ` As faturas são ordenadas alfabeticamente pelo campo Nome da empresa
O exemplo a seguir realiza uma ordenação indexada em dois níveis se um índice composto for especificado no banco [Contatos]Sobrenomes + [Contatos]Nome:
ORDER BY([Contatos];[Contatos]Sobrenome;>;[Contatos]Nome;>)
Em um formulário de saída mostrado em modo Aplicação, você lhe permite aos usuários ordenar uma coluna em ordem crescente simplesmente clicando no cabeçalho da coluna. Se o usuário mantém pressionada a tecla Shift enquanto clica em outros cabeçalhos de colunas, a ordenação é realizada em vários níveis:
Cada cabeçalho de coluna contém um botão ressaltado associado com o seguinte método de objeto:
MULTINIVEL(->[CDs]Titulo) `Botão do cabeçalho da coluna título
Cada botão chama ao método de projeto MULTINIVEL passando um ponteiro ao campo da coluna correspondente. O método de projeto MULTINIVEL é o seguinte:
` Método de projeto MULTINIVEL
` MULTINIVEL(Ponteiro)
` MULTINIVEL(->[Tabela]Campo)
C_POINTER($1) `Nível de ordenação (campo)
C_LONGINT($lNivelNb)
`Construção de critérios
If(Not(Shift down))&NBSP;&NBSP; `Ordenação simples (um nível)
ARRAY POINTER(aPtrCampoOrdem;1)
aPtrCampoOrdem{1}:=$1
Else
$lNivelNb:=Find in array(aPtrCampoOrdem;$1)&NBSP;&NBSP; `Já está ordenado este campo?
If($lNivelNb<0)&NBSP;&NBSP; `Sim não
INSERT IN ARRAY(aPtrCampoOrdem;Size of array(aPtrCampoOrdem)+1;1)
aPtrCampoOrdem{Size of array(aPtrCampoOrdem)}:=$1
End if
End if
`Execução da ordenação
$lNivelNb:=Size of array(aPtrCampoOrdem)
If($lNivelNb>0)&NBSP;&NBSP; `Há pelo menos um nível de ordenação
For($i;1;$lNivelNb)
ORDER BY([CDs];(aPtrCampoOrdem{$i})->;>;*)&NBSP;&NBSP; `Construir a ordenação
End for
ORDER BY([CDs])&NBSP;&NBSP; `SE não houver * termina a definição da ordenação e começa a operação de ordenação atual.
End if
Sem importar como se defina a ordenação, se a operação de ordenação vai a tomar algum tempo, 4D mostra automaticamente uma mensagem que contenha um termômetro de progressão. Estas mensagens podem ser ativadas e desativadas utilizando os comandos MESSAGES ON e MESSAGES OFF. Se for mostrado o termômetro de progresso, o usuário pode clicar no botão Deter para interromper a ordenação. Se a ordenação é terminada corretamente, OK toma o valor 1. Do contrário, se a ordenação for interrompida, OK toma o valor 0 (zero).
Produto: 4D
Tema: Pesquisas
Número
49
Modificado: 4D v11 SQL
Manual de linguagem 4D ( 4D v12.4)
Manual de linguagem 4D ( 4D v11 SQL Release 6)
Manual de linguagem 4D ( 4D v14 R3)
Manual de linguagem 4D ( 4D v14 R2)
Manual de linguagem 4D ( 4D v13.5)
Manual de linguagem 4D ( 4D v14.3)
Manual de linguagem 4D ( 4D v14 R4)