2012-01-26 14 views
0

私は探していましたが、これを行う方法はありません。私はショーにしたい特定の名前が最初のテスト」と呼んでみましょうユーザー名を特定名で注文してください(PHP)

SELECT A.user_id, A.username, B.user_colour FROM likes AS A, users AS B 
      WHERE sta_id=$sta_id AND A.user_id = B.user_id 
      ORDER BY username ASC; 

:私はここのコードがあり、私はこれが可能であればknwoいけない、最初のユーザー名でのSQLの結果を注文しようとしているが、特定の名前を持ちますよ"

答えて

1

ケースステートメントはORDER BYに置くことができます。ORDER BYは、特定の名前に他のものよりも低い値を効果的に割り当てます。残りは

SELECT A.user_id, A.username, B.user_colour FROM likes AS A, users AS B 
WHERE sta_id=$sta_id AND A.user_id = B.user_id 
ORDER BY 
CASE WHEN A.username = 'some specific name' THEN 0 ELSE 1 END, 
username ASC; 
+0

あなたは 'ASC'ソートでソート' DESC'(0の上に1)を組み合わせている - 特にマニュアルに反対助言何か;)既に修正 –

+0

@Kolink。それはタイプミスでした。 –

+0

ああ、あなたは私のコメントを切った:D良い1つ。 –

1
ORDER BY IF(`username`='testing',0,1) ASC, `username` ASC 

はうまくそれを行う必要があり、アルファベットASCであるためにはそれは、その後、通常のusername順が続いています。

+0

RTFMにはあまりにも怠惰なので、私は尋ねています。あなたの 'ORDER BY'で' IF'を使うと、MySQLがインデックスを使ってソートするのを防ぐことができますか? – rdlowrey

+0

ああ...正直に分かりません。見つけ出すには 'EXPLAIN'を実行しなければなりません。 –

+0

@rdlowrey、残念ですが、 '= 'testing''でさえmysqlがインデックスを使ってソートするのを妨げるかもしれません。 –

1
ORDER BY (username='testing') DESC,username ASC 
関連する問題