2017-11-16 19 views
0

私はMySQLを使用してデータテーブルから列を返します。私がしたいのは、Order Byを使用して、結果を日付フィールドで昇順に並べ替えるだけでなく、カスタム列が他の目的の列と共に返され、カスタム列がOrder By結果に関連してインデックスを表す場合です。注文を表すカスタム列

SELECT 
    `alert_id`, 
    `message`, 
    `expiration` 
FROM 
    `alert` 
WHERE 
    `is_active` = TRUE 
ORDER BY 
    `expiration` 

しかし、私はとの難しさを抱えているにも順序を表しカスタム列を返す方法である:右、私は以下の結果だけを希望の列を返し、注文したクエリを持っています。したがって、たとえば、私は行が返され、次の(サンプルデータ)を希望:エイドリアンの助けを借りて

Pior to Order and Custom Column   After the Order and Custom Column 
+----------+---------+------------+ +----------+---------+------------+----------+ 
| alert_id | message | expiration | | alert_id | message | expiration | order_by | 
+----------+---------+------------+ +----------+---------+------------+----------+ 
| 1  | alert1 | 2017-11-20 | | 5  | alert5 | 2017-11-16 |  1 | 
| 5  | alert5 | 2017-11-16 | | 6  | alert6 | 2017-11-17 |  2 | 
| 6  | alert6 | 2017-11-17 | | 1  | alert1 | 2017-11-20 |  3 | 
+----------+---------+------------+ +----------+---------+------------+----------+ 
+0

注意: 'TRUE'は' 1'の単なるエイリアスです。実際のブール値はMySQLにはありません。 – tadman

+1

探しているものは、SQLServerとOracleでROW_NUMBER()と呼ばれるものです。そのキーワードで検索すると、stackoverflowで多くの質問が見つかるでしょう。 –

+1

@AdriánE - MySQLではROW_NUMBER関数を使用できませんが、変数を宣言してSELECTステートメントでそれをインクリメントすることで、ROW_NUMBER関数をエミュレートできました。どうもありがとうございます。 – David

答えて

1

をROW_NUMBER関数を言及して、私はMySQLを使用していて、その機能が利用できない場合でも、私はエミュレートすることができましたこの関数は以下を使用しています:

SET @order = 0; 
SELECT 
    `alert_id`, 
    `message`, 
    DATE_FORMAT(`expiration`, '%M %D, %Y') AS formatted_date, 
    (@order := @order + 1) AS order_by 
FROM 
    `alert` 
WHERE 
    `is_active` = TRUE 
ORDER BY 
    `expiration`; 
関連する問題