4D v14.3

ORDER BY

ホーム

 
4D v14.3
ORDER BY

ORDER BY 


 

ORDER BY ( {aTable ;}{ aField }{; > または < }{; aField2 ; > または <2 ; ... ; aFieldN ; > または <N}{; *} ) 
引数   説明
aTable  テーブル in セレクションをソートするテーブル, または 省略した場合、デフォルトテーブル
aField  フィールド in 各レベルのソートするフィールド
> または <  演算子 in 各レベルのソート方向: >: 昇順, または <: 降順
演算子 in ソート継続フラグ

説明   

ORDER BYは、カレントプロセスのaTableのカレントレコードセレクションをソートします。ソートが終了すると、セレクションの先頭レコードがカレントレコードとなります。

aTable引数を省略した場合、コマンドはデフォルトテーブルに適用されます (デフォルトテーブルが事前に設定されていれば)。デフォルトテーブルが設定されていない場合、4Dは引数として渡された最初のフィールドのテーブルを使用します。引数を渡さず、デフォルトテーブルも設定されていない場合、エラーが生成されます。

aField> または <* 引数を指定しない場合、ORDER BYコマンドはaTableを対象とした並び替えエディタを表示します:

並び替えエディタの使用に関する詳細は、4D Design Referenceを参照してください。

ユーザはソートを組み立て、並び替えボタンをクリックしてソートを実行します。ソートが中断されずに実行されると、システム変数OKに1がセットされます。ユーザがキャンセルボタンをクリックすると、ORDER BYは中止されてソートは実行されず、システム変数OKには0がセットされます。

以下の例は[Products]テーブルを対象とした並び替えエディタを表示します:

 ORDER BY([Products])

以下の例は、デフォルトテーブルを対象とした並び替えエディタを表示します (デフォルトテーブルが設定されていれば):

 ORDER BY

aField> または < を指定すると、標準の並び替えエディタは表示されず、ソートはプログラムで定義されることになります。1つのレベル、または複数のレベルを用いてセレクションのソートを実行することができます。ソートレベルごとに、aFieldにフィールドを、ソート方向として > または < を指定します。> は昇順を、< は降順を意味します。

以下の例は[Products]テーブルのカレントセレクションをnameフィールドで昇順に並べ替えます:

 ORDER BY([Products];[Products]Name;>)

以下の例は[Products]テーブルのカレントセレクションをnameフィールドで降順に並べ替えます:

 ORDER BY([Products];[Products]Name;<)

以下の例は[Products]テーブルのカレントセレクションをtypeとpriceフィールドで、両レベルとも昇順に並べ替えます:

 ORDER BY([Products];[Products]Type;>;[Products]Price;>)

以下の例は[Products]テーブルのカレントセレクションをtypeとpriceフィールドで、両レベルとも降順に並べ替えます:

 ORDER BY([Products];[Products]Type;<;[Products]Price;<)

以下の例は[Products]テーブルのカレントセレクションをtypeの昇順およびpriceの降順で並べ替えます:

 ORDER BY([Products];[Products]Type;>;[Products]Price;<)

以下の例は[Products]テーブルのカレントセレクションをtypeの降順およびpriceの昇順で並べ替えます:

 ORDER BY([Products];[Products]Type;<;[Products]Price;>)

ソート方向引数 > または < を省略すると、デフォルトで昇順が使用されます。

以下の例は[Products]テーブルをnameフィールドで昇順にソートします:

 ORDER BY([Products];[Products]Name)


1つのフィールドのみの指定 (1レベルのソート) で、そのフィールドにインデックスが設定されている場合、インデックスを使用してソートします。インデックスが設定されていなかったり、複数のフィールドを指定した場合には、(複合インデックスの場合を除き) ソート処理はシーケンシャルに行われます。フィールドは、並び替えが行われるテーブルに属しているか、aTableへの自動リレートまたはマニュアルリレートが設定された1テーブルに属しています。この場合、ソート処理は常にシーケンシャルに行われます。
ソートされるフィールドの組が複合インデックスである場合、ORDER BYはそのインデックスを使用します

以下の例は、[Products]Nameフィールドにインデックスが設定されている場合は、インデックスソートを実行します:

 ORDER BY([Products];[Products]Name;>)

以下の例は、フィールドにインデックスが設定されていてもいなくても、シーケンシャルソートを実行します:

 ORDER BY([Products];[Products]type;>;[Products]Price;>)

以下の例は、リレートフィールドを使用してシーケンシャルソートを実行します:

 ORDER BY([Invoices];[Companies]Name;>) ` InvoicesはCompaniesテーブルのnameフィールドを使用してソートされる

データベースに[Contacts]LastName + [Contacts]FirstNameの複合インデックスが設定されている場合、以下の例題は2レベルのソートをインデックスを使用して行います:

 ORDER BY([Contacts];[Contacts]LastName;>;[Contacts]FirstName;>)

マルチソート (複数のフィールドによるソート) を実行するために、オプション引数 * を指定してORDER BYを何度も必要なだけ呼び出すことができます。実際のソートを始める最後のORDER BYにはこの引数を渡しません。この設定は、カスタマイズされたユーザインタフェースでの複数キーのソート管理に役立ちます。
警告: このシンタックスを利用した場合はORDER BYのコールごとに1つのソートレベル (フィールド) だけを渡すことができます。

アプリケーションモードで表示される出力フォームで、ユーザが列ヘッダをクリックすると昇順にソートが行われるようにします。

Shiftキーを押しながら他の縦の列ヘッダをクリックすると、複数レベルでソートが実行されます:

各列ヘッダには、以下のオブジェクトメソッドが記述されたハイライトボタンが置かれています:

 MULTILEVEL(->[CDs]Title`Title column header button

各ボタンは、列フィールドに対応するポインタを引数に、MULTILEVELプロジェクトメソッドを呼び出します。MULTILEVELプロジェクトメソッドは、以下の通りです:

  ` MULTILEVEL Project Method
  ` MULTILEVEL (Pointer)
  ` MULTILEVEL (->[テーブル]フィールド)
 
 C_POINTER($1`ソートレベル (フィールド)
 C_LONGINT($lLevelNb)
 
  `ソートレベルを取得
 If(Not(Shift down)) `1レベルのソート
    ARRAY POINTER(aPtrSortField;1)
    aPtrSortField{1}:=$1
 Else
    $lLevelNb:=Find in array(aPtrSortField;$1`このフィールドは既にソートされているか?
    If($lLevelNb<0) `されていなければ
       INSERT IN ARRAY(aPtrSortField;Size of array(aPtrSortField)+1;1)
       aPtrSortField{Size of array(aPtrSortField)}:=$1
    End if
 End if
  `ソートを実行
 $lLevelNb:=Size of(aPtrSortField)
 If($lLevelNb>0) `最低1つのソートレベルがある
    For($i;1;$lLevelNb)
       ORDER BY([CDs];(aPtrSortField{$i})->;>;*) `ソート定義を構築
    End for
    ORDER BY([CDs]`* を省略して、実際のソートを実行する
 End if


ソートの定義方法に関係なく、実際のソート処理に時間がかかる場合は、4Dは自動的にサーモメータで進捗状況のメッセージを表示します。MESSAGES ONコマンドとMESSAGES OFFコマンドを使用して、メッセージを表示または非表示にすることができます。進捗サーモメータが表示された場合、ユーザは中止ボタンをクリックしてソートを中止することができます。ソートが正常に終了すると、システム変数OKには1がセットされ、それ以外の場合には0がセットされます。

 
プロパティ 

プロダクト: 4D
テーマ: クエリ
番号: 49

このコマンドはOKシステム変数を更新しますこのコマンドはカレントレコードを変更します

 
履歴 

変更: 4D v11 SQL

 
参照 

ORDER BY FORMULA

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v12.4)
ランゲージリファレンス ( 4D v11 SQL Release 6)
ランゲージリファレンス ( 4D v14 R3)
ランゲージリファレンス ( 4D v14 R2)
ランゲージリファレンス ( 4D v13.5)
ランゲージリファレンス ( 4D v14.3)
ランゲージリファレンス ( 4D v14 R4)