1

私はこのクエリを持っています:

SELECT * FROM Users;

戻る場所

 id    name  ...
 1     ...
 2     ...
 3     ...
 4     ...

今、私が欲しいのは、返された結果を ID に基づいて並べ替え、それに基づいて順序をローテーションすることです。たとえば、ID=3 に基づいて並べ替えたいとします。私が戻したいのは:

 id    name  ...
 3     ...
 4     ...
 1     ...
 2     ...

これは MySQL で直接可能ですか、それともサーバー側で行う必要がありますか?

4

3 に答える 3

3

私は簡単に考えます:

SELECT * FROM Users ORDER BY id<3,id
于 2012-11-25T09:47:37.610 に答える
1

これは、を使用して実現できます

ORDER BY CASE 
    WHEN id < 3 THEN id + (SELECT MAX(id) FROM users) 
    ELSE id 
END

ただし、mysqlはその順序にインデックスを使用できないことに注意してください。このローテーションをSQLサーバーの外部で行うことが、最も実用的な解決策だと思います。

于 2012-11-25T09:41:42.983 に答える
1

2つの列で並べ替えることができます。最初の列は、次の場合にのみ入力されid >= 3ます。

order by
    case 
    when id >= 3 then -id
    end desc
,   id

最初の列は並べ替え-idられるのでnull、最後にある降順で並べ替えることができます。

SQLFiddleでの実例。

于 2012-11-25T09:43:50.290 に答える