MySQLでSELECT時の並び順をFIELD以外で並び変える方法


MySQLの並び順に関して質問です。以下の様なデータがあるとします。

[code]

    データ1
    id,name,flag
    1,鈴木,0
    2,佐藤,1
    3,佐々木,0
    4,藤木,0
    
    データ2
    id,name,flag
    1,鈴木,0
    2,佐藤,0
    3,佐々木,0
    4,藤木,1
    
[/code]

上記データをFIELD関数以外で以下の様に並び替えてSELECTする方法はありますでしょうか？

[code]

    データ1
    id,name,flag
    2,佐藤,1
    3,佐々木,0
    4,藤木,0
    1,鈴木,0
    
    データ2
    id,name,flag
    4,藤木,1
    1,鈴木,0
    2,佐藤,0
    3,佐々木,0
    
[/code]

以上、宜しくお願い致します。

> > 追加コメント  
>  flagが1なのは必ず1レコードのみ。  
>  レコードの順番は必ず、idが1であれば、次のレコードが1、前のレコードがidの最大値になります。




環境無いのでクエリだけ組みました。  
基準となるIDを副問い合わせしてUNIONで結合すればいいのかなぁと  
**追記** ：`UNION`句ではソート順序を保障されません。定数カラムを追加しソートしなおすことが必要です。

[code]

    SELECT *
    FROM (
        SELECT id
             , name
             , flag
             , (SELECT id FROM tableName WHERE flag = 1) AS target
             , 1 AS rank
        FROM tableName
        WHERE target<=id
        UNION ALL
        SELECT id
             , name
             , flag
             , (SELECT id FROM tableName WHERE flag = 1) AS target
             , 2 AS rank
        FROM tableName
        WHERE target>id
    ) a
    ORDER BY rank, id
    
[/code]

* * *

**コメントのやり取りを追記**  
※`UNION`句を使用した場合に`ORDER BY`を使用する場合について  
[Using union and order by clause in
mysql](https://stackoverflow.com/questions/3531251)  
※MySQLリファレンス  
[MySQL 5.6 リファレンスマニュアル :: 13.2.9.4 UNION
構文](https://dev.mysql.com/doc/refman/5.6/ja/union.html)




環境無いのでクエリだけ組みました。  
基準となるIDを副問い合わせしてUNIONで結合すればいいのかなぁと  
**追記** ：`UNION`句ではソート順序を保障されません。定数カラムを追加しソートしなおすことが必要です。

[code]

    SELECT *
    FROM (
        SELECT id
             , name
             , flag
             , (SELECT id FROM tableName WHERE flag = 1) AS target
             , 1 AS rank
        FROM tableName
        WHERE target<=id
        UNION ALL
        SELECT id
             , name
             , flag
             , (SELECT id FROM tableName WHERE flag = 1) AS target
             , 2 AS rank
        FROM tableName
        WHERE target>id
    ) a
    ORDER BY rank, id
    
[/code]

* * *

**コメントのやり取りを追記**  
※`UNION`句を使用した場合に`ORDER BY`を使用する場合について  
[Using union and order by clause in
mysql](https://stackoverflow.com/questions/3531251)  
※MySQLリファレンス  
[MySQL 5.6 リファレンスマニュアル :: 13.2.9.4 UNION
構文](https://dev.mysql.com/doc/refman/5.6/ja/union.html)

