flashのActionscriptとムービーとの連携について

このQ&Aのポイント
  • Actionscriptで配列のクイックソートを行うプログラムで、基準値の出力がうまくいかない問題が発生しています。
  • 処理の度にムービー上に基準値を順番に出力させたいが、最初と途中の基準値が出力されない。
  • 対処方法や解決策についてどうすれば良いか教えてください。
回答を見る
  • ベストアンサー

flashのActionscriptとムービーとの連携についてII

Actionscriptで、配列dのleftからrightまでの間のデータをクイックソートする再帰のプログラムの中で、 function quick(d,left, right){ if(left>=right){ return; } var p = d[d]; disp.text = "基準値は"+p; ・・・・・・ ・・・・ } でC言語のように処理が行なわれる度にムービー上に基準値を順番に出力させたいのですが、最後の処理の時の基準値が出力されるだけで、初めの時の基準値、1回目から最後までの途中経過の基準値を出力させる事ができません。 どうしたらいいのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DPE
  • ベストアンサー率85% (666/776)
回答No.3

trace アクションのように履歴のような形式で表示するのではなく、値の部分だけがアニメーションするといいますか、値が変遷していく様子を表示したいとのことでしょうか? これですと、少々面倒な話になります。 Flash にはフレームという考え方があります。 タイムラインにフレームがたくさん並んでいて、再生ヘッドが動くたびにそのフレームが表示されます。 メインのタイムラインとは別に、ムービークリップもタイムラインとフレームを持っていて、ムービークリップがステージに存在している間は、ムービークリップは自分のタイムラインに従って自分のフレームを再生し続けます。 絵が動いて見えるのは、フレームが再生されて次々に絵が切り替わっている、つまりパラパラマンガと同じ原理によるものなのです。 for ループは1フレーム内で繰り返し処理を行うものです。 #1でご紹介しました for ループで配列変数の内容を表示するスクリプトでは、1フレームのうちに表示内容が決定され、テキストフィールドにまとめて出力されるため、1行ずつ順に表示されていくといった動きは付きません。 1行ずつ順に表示されるようにしたいのであれば、1フレームに1度、”基準値は○”という出力を送るようにしなければなりません。 もっとも、フレームレートが 12 fps ですと、これは1秒間に 12 フレーム再生する速さということです。 1フレームごとに1度、つまり 1 / 12 秒ごとに1度出力したのでは、速すぎて順に表示されているようには見えないかもしれません。 分かりやすく更新するなら、別途カウントを取って、例えば6フレームに1度出力する、といった調整も必要になるかと思います。 --------------------------------------------------- 1フレーム内でまとめてではなく一定間隔で表示されていくようにするには、ムービークリップが持っている enterFrame というイベントを利用する方法があります。 enterFrame イベントは、ムービークリップがステージに存在する限り、フレームレート分の1秒ごとに発生しています。 つまり、enterFrame イベント発生時に指定の処理をさせるように定義すると、フレームレート分の1秒ごとにその処理が自動的に行われます。 例えば、#1の例を (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  //配列変数を用意  d = new Array( 0 , 5 , 10 , 15 , 20 );  //配列変数の参照位置を保持  tbl_ref = 0;  //出力間隔を調整するウェイトカウンタ  out_wait = 0;  disp.text = "";  /*数フレームに1度、テキストフィールドに出力*/   _root.onEnterFrame = function()  {   //6フレームに1度、配列変数の中身をダイナミックテキストに出力   out_wait++;   if( out_wait >= 6 )   {    //テキストフィールドに表示    disp.text = "基準値は" + d[ tbl_ref ];    //配列変数の参照位置を1つ進める    tbl_ref++;    //配列変数が尽きたら、この処理を終了する    if( tbl_ref >= d.length )    {     delete _root.onEnterFrame;    }    //出力ウェイトをリセット    out_wait = 0;   }  }; このように変えると、6フレームに1度、テキストフィールドに出力が行われます。フレームレートが 12 fps なら、6 / 12 = 1 / 2 で、約 0.5 秒間隔での出力となります。 テキストは常に「基準値は○」という形で更新しているので、値の部分だけが更新されていくように見えます。 _root.onEnterFrame = function 内の処理はフレームレート分の1秒ごとに呼び出されます。 つまり、フレームレートが 12 fps の時は 1 / 12 秒ごとに呼び出されることになります。 1/12 秒ごとに出力すると表示が速すぎてしまいますので、out_wait という変数でカウントを取り、表示する間隔を調整しています。 Flash ではムービー自体もムービークリップとして扱います。 通常は _root という名前で識別します。 ムービー自体はムービーが再生されている間はステージから消えることがありませんから、_root の enterFrame イベントはムービーが再生されている限り、フレームレート分の1秒ごとに発生し続けます。 _root.onEnterFrame = function ・・・は、_root で enterFrame イベントが発生する度に以下の処理を呼び出せ、という定義をするものです。 onEnterFrame はイベントハンドラと呼ばれるもので、一種の変数のようなものです。 C言語の、関数を指すポインタに似ていると言えば、分かりやすいでしょうか。 ただ、1度定義しておくと、指定のイベントが発生する度に指定の処理(関数)が自動的に呼び出される点が独特です。 上記の例では、配列変数の中身が尽きた後は呼び出す必要がないので、delete というアクションを使って onEnterFrame ごと削除し、以降は呼び出されないようにしています。 --------------------------------------------------- 長くなりましたが、結論をいいますと。 1フレーム内で for ループなどを利用して出力させる限りは、trace アクションのように  基準値は○  基準値は△  基準値は□   : という形式で表示するか、最終的の値だけを「基準値は□」という形でしか表示できません。 「基準値は○」の○の部分だけが次第に更新されていく様子を見せるには、○の値を求める処理をムービークリップの enterFrame イベントを使って数フレームに1度だけ実行し、フレームごとに更新していかないと、徐々に変遷していくようには見えないということです。

remonedo
質問者

お礼

とても丁寧に解説してくださりありがとうございます。面倒なことをやろうと思ってしまっていた感じですね。すみません。 1人で行き詰って困っていたので、大変感謝しています。本当にありがとうございました。明日早速、やってみます。本当にありがとうございます。

その他の回答 (2)

  • DPE
  • ベストアンサー率85% (666/776)
回答No.2

> 基準値が変わるごとに表示される値を書き換えたいので、値が次の処理になったら値が書き換わるようにしたいのですが、 この部分が、よく分からないのですが・・・ trace アクションのように、  基準値は○  基準値は△  基準値は□   : といった具合にテキストフィールドに表示させたい、とのことでよろしいでしょうか? #1でも書きました通り、text プロパティとは文字列を保持している、ただの変数です。 そして、テキストフィールド(今回の例では disp )がステージに存在している間は常に text プロパティも存在しており、いつでも自由に参照して値を書き換えることができます。 #1では、配列変数の中身をテキストフィールドに出力する例として for ループの中で使っていますけれど、別にループやある関数内などの特定の場所で1回で書き換えないと、text プロパティがメモリ上からクリアされて使用できなくなるといったことではありません。 つまり、値を出力したい時に、随時  disp.text += "基準値は" + p + "\n"; とすれば、前の表示に新しい内容が連結されて表示されます。 前の内容を消していいのであれば、  disp.text = p; このように = 演算子で新しい文字列(数値の入った変数を代入すると、文字列として連結されます)を代入すればいいだけです。 表示をまっさらな状態にしたいなら  disp.text = ""; と、空文を代入すると、文字列がクリアされ、テキストフィールドは全くの空白になります。 要するに、text プロパティを書き換えるタイミングの問題だと思います。 今回の件ですと、基準値を求める関数内や、その関数から値を取得した時などが目安でしょうか。

remonedo
質問者

補足

基準値は○です。と初め出力されて、次の処理が呼び出されたら、文の表示はそのままで、前の○の値を消して、○の値だけを書き換えるということがしたいのですが、そうなると、基準値を求める関数内で、 disp.text = p; を行なえばよいということでしょうか? 初めそう思い、 function quick(d, left, right) { if (left>=right) { return; } trace("左は"+(left+1)); trace("右は"+(right+1)); var a = (left+right)/2; //基準値はとりあえず配列の中心の値で var b = Math.floor(a); //trace(b); var p = d[b];       *** ***部分にdisp.text = p; をやってみたのですが、最後の基準値だけが出力され、最初の値から最後の基準値へと処理されるたびに出力が書き換わって表示されなかったのです。 プログラムに弱くてすぐに理解できなく申し訳ありません。

  • DPE
  • ベストアンサー率85% (666/776)
回答No.1

TextField クラスの text プロパティの正体は、文字列を保持する、ただの変数に過ぎません。 ですから、例えば (↓各行頭に全角のスペースが入っています。コピーする際はご注意ください)  //配列変数を用意  d = new Array( 0 , 5 , 10 , 15 , 20 );  //配列変数の中身をダイナミックテキストに表示  disp.text = "";  for( i = 0 ; i < d.length ; i++ )  {   p = d[ i ];   disp.text += p + "\n";  } このように text プロパティに数値や文字列を次々に連結していくと、trace アクションと同様に表示できます。 ( ActionScript では、文字列も + 演算子で連結できます) disp.text = "・・・"; とした時は text プロパティに代入するという意味になりますので、先に入っていた内容に新しい文字列が上書きされて、最後に代入した文字列だけが出力されます。 trace アクションは1回の出力ごとに自動で改行してくれるサービスがありますが、text プロパティを操作した時は改行は入りません。改行は随時、自分で追加してください。 このあたりは、C言語をご存知でしたら、何となくご理解いただけると思います。 なお、テキストフィールドに何も表示されていない時、text プロパティには改行コードが入っているようで、そのまま文字列を連結すると最初の行が勝手に改行されて空いてしまいます。 テキストフィールドに出力する前に  disp.text = ""; として text プロパティを全くの空っぽにしておくと、この1行は空かなくなります。

remonedo
質問者

補足

出力は出来るようになりました。ありがとうございます。 ですが、基準値が変わるごとに表示される値を書き換えたいので、値が次の処理になったら値が書き換わるようにしたいのですが、その場合はどうしたらいいのでしょうか?

関連するQ&A

  • flashのActionscriptとムービーとの連携について

    Actionscriptで var p = d[b]; trace("基準値は"+p); では出力にただプログラム実行の時みたいに出力されるだけなんですが、ムービーの画面に出力させたいんです。ネットとかで色々調べてみたのですが、イマイチActionscriptとムービーとの連携の仕方がつかめず行き詰ってしまってます。どうしたらいいのでしょうか?また、ムービーとActionscriptとの連携を理解するに当たってお勧めのサイトなどがあったら教えてください。お願いします。

  • クイックソートの再帰呼び出し後の記述について(特に配列の範囲)

    アルゴリズムをすこしかじってみているのですが、いきなり躓いてしまいました。詳しい方にお聞きします。クイックソートの再帰呼び出し後のプログラムの記述がよくわかりません。(特に配列の範囲) QuickSort(Head,Tail)というプログラムがあるとします。最初の一連の処理が終わり、再帰呼び出しの部分で、 QuickSort(Head,Left-1)という前半部分を指定した再帰呼び出しとQuickSort(Right+1,Tail)という後半部分を指定した再帰呼び出しがされるとします。ここまでは分かるのですが、この再帰呼び出しのプログラムの実行を記述するとなるとどうなるのでしょうか?特に分からないのはこの再帰呼び出しでさらに再帰呼び出しされるQuickSortのカッコ内の配列の範囲がどのようになるのか、何か特別な記述はされるのかということです。あとソートの必要のないレベルまで来た場合の処理(記述)も分かりません。どなたかご教授願えないでしょうか?

  • flashのActionscriptでのムービーとのタイミング処理

    スクリプトの途中だけの部分ですが 再帰の中で // ここで実際に○を移動させる Pofmaru1(l); Pofmaru2(r); 再帰の外で // maru1を移動させる関数Pofmaru1 function Pofmaru1(l) { if (l == 1) { gotoAndPlay("maru1",2); }else if (l == 2) { ・・・・・・ // maru2を移動させる関数Pofmaru2 function Pofmaru2(r) { if (r == 1) { gotoAndPlay("maru2",2); }else if (r == 2) { ........ として、移動先のフレームにmaru1,maru2を目的の場所へ移動するムービーを呼び出して再生するようにしたいと思いました。 しかし、最後のムービーだけしか表示さえれない状態です。if文で指定のフレームへ移動してそのムービーが再生されてから、次のプログラムの動きへ移るようにしたいと思いました。そこでタイミング処理をすればいいのではないかと思ったのですが、いろいろ調べてみたのですが、プログラムがあまり得意では無く、再帰の中でフレーム移動の関数を呼び出しているので、どうしたらいいのかわからず行き詰ってしまい困っています。Actionscriptとムービー再生のタイミング処理はどうしたらいいのでしょうか? アドバイスください。お願いします。

  • 学生番号,英語,数学,物理という順で一行にかかれたデータを読み込み,各

    学生番号,英語,数学,物理という順で一行にかかれたデータを読み込み,各自の合計点が大きい順にクイックソートで並び替えて,出力するプログラム 全体の流れは、        ・先頭を示すポインタを準備。        ・標準入力からデータをリンクドリスとに読み込む。        ・構造体に対するポインタを使ってデータをソートする。         ->一覧を保持する「ポインタへのポインタ」の一覧を作る。         ->データへのポインタのリストを作る。         ->クイックソートで並び替える。        ・構造体に対するポインタを使って、データを表示する このプログラムで、構造体に対するポインタを使ってクイックソートをするプログラムがわかりません。構造体に対するポインタを使って、left,right,pivotやwhile,ifの条件などをどう表現したらよいかが悩みの種です。 配列を使ったクイックソートのプログラムは出来ているので参考にしていますが。うまくいかない状況です。 どなたか教えていただけないでしょうか。 以下参考にしている配列を使ったクイックソートのプログラムの一部です。 void sort(int array[],int left, int right) { int pivot=0,i=0,j=0; i=left; j=right; pivot=array[(left+right)/2]; while(1) { while(array[i]<pivot) { i++; } while (pivot<array[j]) { j--; } if(i>=j) { break; } swap(array,i,j); i++; j--; } if(left < i-1) { sort(array,j+1,right); } if(j+1<right) { sort(array,j+1,right); } } void quickSort(int array[], int size) { int left=0, right=0; left=0; right=size-1; sort(array,left,right); return 1; } よろしくお願いします。

  • ActionScriptについて

    今、ActionScriptのトレーニングブックで練習している初心者です。 練習問題で、配列の34, 40, 12, 30, 24, 55, 70, 60, 52, 43, 65, 30, 45, 20, 15を全て足したいのですが、 出力すると、 「すべての予約済み座席数は014131211109876543210人です」 と出てきてしまいます。(595と出てくるはずだと思うんです) 本の通りに記述してみたはずなのですが、どこか変なのでしょうか? var reserved_array = [34, 40, 12, 30, 24, 55, 70, 60, 52, 43, 65, 30, 45, 20, 15]; var total_num = 0; for (var i in reserved_array) { total_num += i; } trace("すべての予約済み座席数は"+total_num+"人です");

    • ベストアンサー
    • Flash
  • クイックソートがうまくいかない

    クイックソートの仕様はこうです。 (1)バラバラにランダムで入力した配列から基準値を設定する。 (2)前から順番に辿って行って基準値よりも大きいならば、基準値よりも後に移動、小さいならば、基準値よりも前に移動させる。(私のプログラムの場合は基準値を配列の一番目の数に設定しています。) (3)小さいほうと大きいほうの二つのグループに分かれたらまたそれらのグループごとにクイックソートにかける。 (4)二つのグループを分けることができなくなればソート完了。 動作させてみたところ関数QuickSortの中の「基準値より大きいか小さいかの仕分けの処理」の後で、再帰処理があるのですが、再帰ではなく無限ループになってしまっているようです。 自分では、この処理で無限ループをとめているつもりです。 if(youso==1) { return; } なぜこのようになってしまうのでしょうか お手数ですが、よろしくお願いいたします。 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #define N 10 int k,q; void QuickSort(char mi,char hai[10],int youso) { char shoubox[10]; char bigbox[10]; int i,len,len2; k=0,q=0; /*もし配列haiの大きさが1ならば終了*/ if(youso==1) { return; } /*配列の2番目から最後まで基準値からの大小により仕分けしていく。大きいならば、配列bigboxに小さい*/ /*ならば配列shouboxにそれぞれ入れる。*/ for(i=1;i<youso;i++) { if(hai[i]>mi) { bigbox[k++]=hai[i]; } else { shoubox[q++]=hai[i]; } } /*仕分け処理はここまで*/ /*小さいほうの配列と大きいほうの配列をそれぞれクイックソートにかける再帰処理。*/ QuickSort(shoubox[0],shoubox,q); QuickSort(bigbox[0],bigbox,k); /*それぞれのソートが完了したら、配列haiに「小さいほうの配列」→「基準値」→「大きいほうの配列」 の順に値を代入していく。*/ len=strlen(shoubox); for(i=0;i<len;i++) { hai[i]=shoubox[i]; } hai[len]=mi; len2=strlen(bigbox); for(i=(len+1);i<len+len2;i++) { hai[i]=bigbox[i]; } /*代入処理ここまで。*/ } int main(void) { char array[N]; char m; int i,val,j; srand(time(NULL)); /*(1~10)までの数字をランダムに入力する処理*/ for(i=0;i<N;i++) { do{ val=rand()%10; for(j=0;j<i;j++) { if(val+'0'==array[j]) { break; } } }while(j<i); array[i]=val+'0'; } /*ランダムに値を入力する処理ここまで*/ m=array[0]; /*値配列の最初を基準値mに設定*/ QuickSort(m,array,N); /*基準値、配列、要素数を実引数として、クイックソートを呼び出す。*/ /*昇順に並べ替えた配列arrayを出力する。*/ for(i=0;i<N;i++) { printf("array[%d]=%c\n",i,array[i]); } return 0; }

  • クイックソートをC++で作りたいのですが・・・

    題の通り、C++でクイックソートを作りたいのですが、以下のコードではセグメンテーションエラーで動きませんでした。partition関数があやしいと思い、色々と試してみたのですが、やはりできなかったので、質問させていただくことにしました。 結果としては、print関数で昇順に表示出来ればいいのですが・・・。 以下のコードのどこをどう変えれば良いのか、ご指摘の方、何卒よろしくお願い致します。 #include <iostream> #include <vector> using namespace std; class Array { private: vector<int> array; public: void insert( int value ){ array.push_back( value ); } int getSize( ){ return (int)array.size( ); } void quick_sort( ){ quick_sort( 0, (int)array.size( ) - 1 ); } void quick_sort( int left, int right ); int partition( int left, int right ); void swap(int *a,int *b){int tmp=*a;*a=*b;*b=tmp;} void print( ); }; // クイックソートにより配列の添字 left ~ right の部分を整列する関数 void Array::quick_sort( int left, int right ) { if ( left >= right ) { return; } int v = partition( left, right ); quick_sort( left, v - 1 ); quick_sort( v + 1, right ); } //この関数を考える // 配列の添字 left ~ right の部分を,pivot の値より小さい要素と,大きい要素に分割し pivot の位置を返す関数 int Array::partition( int left, int right ) { int i=left; //左からの処理位置 int j=right; //右からの処理位置 int pivot=array[(int)(left+right)/2]; //基準 int tmp=0; while(true){ while(array[i]<pivot){i++;} while(array[j]>pivot){j--;} if(i>=j){return i;} tmp=array[i]; array[i]=array[j]; array[j]=tmp; i++; j++; } } // 配列の内容を表示する関数 void Array::print( ) { for ( int i = 0; i < (int)array.size( ); i++ ) { cout << array[i] << " "; } cout << endl; } int main( ) { Array a1; a1.insert( 56 ); a1.insert( 34 ); a1.insert( 57 ); a1.insert( 64 ); a1.insert( 3 ); a1.insert( 87 ); a1.insert( 85 ); a1.insert( 37 ); a1.insert( 21 ); a1.insert( 4 ); a1.insert( 68 ); a1.insert( 62 ); a1.insert( 42 ); a1.insert( 55 ); a1.insert( 63 ); a1.insert( 95 ); a1.insert( 7 ); a1.insert( 32 ); a1.insert( 78 ); a1.insert( 11 ); cout << "要素数: " << a1.getSize( ) << endl; cout << "ソート前: "; a1.print( ); a1.quick_sort( ); // ここで,ソートを行う関数を呼び出す cout << "ソート後: "; a1.print( ); return 0; }

  • クイックソートがうまくいかない

    クイックソートとはこういう仕様のソートのことです。 (1)バラバラの配列から基準値を設定する。 (2)前から順番に辿って行って基準値よりも大きいならば、基準値よりも後に移動、小さいならば、基準値よりも前に移動させる。(私のプログラムの場合は基準値を配列の一番目の数に設定しています。) (3)小さいほうと大きいほうの二つのグループに分かれたらまたそれらのグループごとにクイックソートにかける。 (4)二つのグループを分けることができなくなればソート完了。 自分で確かめてみたのですが、どうやら関数QuickSortの中でさらに再帰的にQuickSortにかけるときにバグが発生しているようです。ですが、なぜバグが起きるのかわかりません。 お手数ですが、よろしくお願いいたします。 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #define N 10 void QuickSort(char mi,char *hai,int youso) { char *shoubox; char *bigbox; int k=0; int q=0; int i,len,len2; /*もし配列haiの大きさが1ならば終了*/ if(strlen(hai)==1) { return; } /*配列の2番目から最後まで基準値からの大小により仕分けしていく。大きいならば、配列bigboxに小さい*/ /*ならば配列shouboxにそれぞれ入れる。*/ for(i=1;i<youso-1;i++) { if(hai[i]>mi) { bigbox[k++]=hai[i]; } else { shoubox[q++]=hai[i]; } } /*仕分け処理はここまで*/ /*小さいほうの配列と大きいほうの配列をそれぞれクイックソートにかける再帰処理。*/ QuickSort(shoubox[0],shoubox,q); QuickSort(bigbox[0],bigbox,k); /*それぞれのソートが完了したら、配列haiに「小さいほうの配列」→「基準値」→「大きいほうの配列」 の順に値を代入していく。*/ len=strlen(shoubox); for(i=0;i<len;i++) { hai[i]=shoubox[i]; } hai[len]=mi; len2=strlen(bigbox); for(i=(len+1);i<len+len2;i++) { hai[i]=bigbox[i]; } /*代入処理ここまで。*/ } int main(void) { char array[N]; char m; int i,val,j; srand(time(NULL)); /*(1~10)までの数字をランダムに入力する処理*/ for(i=0;i<N;i++) { do{ val=rand()%10; for(j=0;j<i;j++) { if(val+'0'==array[j]) { break; } } }while(j<i); array[i]=val+'0'; } /*ランダムに値を入力する処理ここまで*/ m=array[0]; /*値配列の最初を基準値mに設定*/ QuickSort(m,array,N); /*基準値、配列、要素数を実引数として、クイックソートを呼び出す。*/ /*昇順に並べ替えた配列arrayを出力する。*/ for(i=0;i<N;i++) { printf("array[%d]=%c\n",i,array[i]); } return 0; }

  • ActionScriptで配列をクリアする方法を教えてください。

    ActionScriptで、オブジェクトを格納した配列をクリアする正しい方法を教えてください。 具体的には、 ・new Array() で配列を生成する。 ・new Object() で生成したオブジェクトを配列に格納する。 ・配列の中身を処理したあと、配列を一度クリアする。 ・配列に別のオブジェクトを格納する。 ような処理をしたいのですが、メモリリークを起こさずに配列をクリアするにはどうしたらいいでしょうか? 例えば、イメージはこんな感じです。(意味のないコードですが) // 配列の生成 var arr = new Array(); // 配列にオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i; } // 配列のクリア arr.length = 0; // クリアした配列に別のオブジェクトを格納 for (var i = 0; i < 5; i++) { var obj = new Object(); obj.num = i * 2; } 上記のコードで、arr.length = 0; で配列をクリアしていますが、これで配列に格納されたオブジェクトが確保したメモリがすべて解放されるでしょうか? あるいは、配列の内容がなくなるまで pop() 等で取り出す等の処理をする必要があるでしょうか? 以上よろしくお願いします。

    • ベストアンサー
    • Flash
  • 降順と昇順が混じったソートできるかな?

    こういうソートがしたい。 ソート前: article_id | disp_no | write_d ------------+---------+--------------------- 1 | 1000 | 2007-06-05 22:33:00 2 | 1001 | 2007-06-06 11:09:00 3 | 2000 | 2007-06-06 11:18:00 4 | 2001 | 2007-06-06 11:18:00 5 | 3000 | 2007-06-06 11:18:00 (5 rows) ソート後: article_id | disp_no | write_d ------------+---------+--------------------- 3 | 2000 | 2007-06-06 11:18:00 4 | 2001 | 2007-06-06 11:18:00 5 | 3000 | 2007-06-06 11:18:00 1 | 1000 | 2007-06-05 22:33:00 2 | 1001 | 2007-06-06 11:09:00 (5 rows) できるのかな?

専門家に質問してみよう