按用户名排序,先指定名称(php)

按用户名排序,先指定名称(php),php,Php,我一直在寻找,但我找不到任何方法来做到这一点。我正在尝试按用户名排序sql结果,但首先使用特定名称,我不知道这是否可行,下面是代码: 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; 我首先要显示的特定名称称之为“te

我一直在寻找,但我找不到任何方法来做到这一点。我正在尝试按用户名排序sql结果,但首先使用特定名称,我不知道这是否可行,下面是代码:

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;

我首先要显示的特定名称称之为“testing”。

您可以将case语句放入
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;

应该做得很好。

您正在将
DESC
排序(0上的1)与
ASC
排序相结合,这是手册中特别建议的;)啊,你删掉了我的评论:D很好。非常感谢,但我有一个错误:order子句中的“username”列是ambiguous@user1133401应该是
A.username
。修正了上面的问题。我这么问是因为我太懒了,不能在这个问题上使用RTFM。在您的
orderby
中使用
IF
是否会阻止MySQL使用索引进行排序?啊。。。我真的不知道。您必须对其运行
EXPLAIN
才能找到答案。@rdlowrey,恐怕即使
='testing'
也会阻止mysql使用索引进行排序。
ORDER BY (username='testing') DESC,username ASC
ORDER BY (username='testing') DESC,username ASC