-1

私は動的SQLを初めて使用し、理解できないプロジェクトを継承しました。

このプロジェクトでは並べ替えが正しく機能したことがありません。SQL とストアド プロシージャを動的に保ちながら、それを理解しようとしています。

以下のこの行は基本的に問題です。変数 inSortOrder が「first_name」の場合、SQL は最初に first_name で並べ替え、次に姓で並べ替える必要があります。

問題は、渡された別の変数に応じて ASC または DESC でソートする必要があることです。

私は A が何をするものなのかわからず、インターネット上でAに関する情報を見つけることができませんでした。別の「DESC」または「ASC」を追加しようとしましたが、常に無視されます。

何があっても必ず昇順で戻ってきます。これを修正する方法を知っている人はいますか?それでも複数のフィールドで並べ替えますか? Aは何をしますか?

if(inSortOrder='first_name',concat(A.first_name,'_A_',A.last_name),''),

編集: ストアド プロシージャ全体の長さは 100 行を超えていますが、問題のクエリは次のとおりです。私はそれが機能することを知っています。並べ替えに問題があるだけです。具体的には、「A」が何をするのかを理解しようとしています。(アンダースコアの間の a)

変数 inOrder が「first_name」としてストアド プロシージャに配置されているとします。基本的に、別の変数に応じて、最後の行をDESCまたはASCでソートする方法を見つけようとしています。

SELECT A.first_name,

N.middle_name

    N.last_name
  FROM
      student S left JOIN
      names N on S.id = N.student_id
  WHERE
    N.record_status = 'FAILED'

ORDER BY if(inOrder='first_name',concat(N.first_name,' A ',N.last_name),''),

4

1 に答える 1

0

私は問題を理解しました。いつものように、コードに慣れていないときは、コードを見るのにより多くの時間を費やす必要があります。動的SQLは初めてですが、これまでのところ気に入っています。

変数は inSortOrder = 'last_name' inSortType = 'DESC' です。

    if(inOrder='last_name' and inType<>'DESC',concat(N.last_name,'_A_',N.first_name,'_A_',N.middle_name),''),
    if(inOrder='last_name' and inType='DESC',concat(N.last_name,'_A_',N.first_name,'_A_',N.middle_name),'') DESC,
于 2013-03-20T20:18:30.627 に答える