Php (1,2,3)中“user_id”和“name”的MySQL问题顺序`
我一直在为这个问题寻找一个现有的问题,但我不确定要寻找什么。我正在寻找一种基于id列表和第二个变量对结果排序的方法 想象一下下面的记录集Php (1,2,3)中“user_id”和“name”的MySQL问题顺序`,php,mysql,sql-order-by,Php,Mysql,Sql Order By,我一直在为这个问题寻找一个现有的问题,但我不确定要寻找什么。我正在寻找一种基于id列表和第二个变量对结果排序的方法 想象一下下面的记录集 user_id user_name ------------------ 1 Peter 2 John 3 Luke 4 Tim 5 George 6 Michael ~ etcetera 现在,我有了一个用户ID列表(比如1,4,
user_id user_name
------------------
1 Peter
2 John
3 Luke
4 Tim
5 George
6 Michael
~ etcetera
现在,我有了一个用户ID列表(比如1,4,5),我希望查询的结果从这个列表开始
所以我想:
// Edit: replaced 'AND' with ','
SELECT * FROM `user` ORDER BY `user_id` IN (1,4,5), `name`
将返回如下内容:
user_id user_name
------------------
1 Peter <-- Notice the 1,4,5 at the top
4 Tim
5 George
2 John <-- After that its just alphabetical
3 Luke
6 Michael
~ etcetera
user\u id user\u name
------------------
1彼得你可以分别做这两部分,然后用一个接头把它们粘在一起
SELECT * FROM user
WHERE user_id IN (1,4,5)
ORDER BY user_id
UNION
SELECT * FROM user
WHERE user_id NOT IN (1,4,5)
ORDER BY user_name
试试这个:
SELECT *
FROM `user`
ORDER BY
CASE
WHEN `user_id` IN (1,4,5) THEN 1
ELSE `user_id`
END,
`name`
尝试将和
更改为,
SELECT * FROM `user` ORDER BY `user_id` IN (1,4,5) desc, `name`
编辑:已删除,其中您要的查询是此查询
SELECT * FROM user
ORDER BY
IF(FIELD(user_id,1,4,5)=0,99999,FIELD(user_id,1,4,5)),user_name;
我加载了示例数据,并在Windows下的MySQL 5.5.12中运行了查询
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 38
Server version: 5.5.12 MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
MySQL (Current test) :: USE example
Database changed
MySQL (Current example) :: DROP TABLE IF EXISTS user;
user_name VARCHAR(20)
);
INSERT INTO user VALUES
(1,'Peter'),(2,'John'),
(3,'Luke'),(4,'Tim'),
(5,'George'),(6,'Michael');
SELECT * FROM user;
SELECT * FROM user
ORDER BY
IF(FIELD(user_id,1,4,5)=0,99999,FIELD(user_id,1,4,5)),user_name;
Query OK, 0 rows affected (0.02 sec)
MySQL (Current example) :: CREATE TABLE user
-> (
-> user_id INT,
-> user_name VARCHAR(20)
-> );
Query OK, 0 rows affected (0.08 sec)
MySQL (Current example) :: INSERT INTO user VALUES
-> (1,'Peter'),(2,'John'),
-> (3,'Luke'),(4,'Tim'),
-> (5,'George'),(6,'Michael');
Query OK, 6 rows affected (0.02 sec)
Records: 6 Duplicates: 0 Warnings: 0
MySQL (Current example) :: SELECT * FROM user;
+---------+-----------+
| user_id | user_name |
+---------+-----------+
| 1 | Peter |
| 2 | John |
| 3 | Luke |
| 4 | Tim |
| 5 | George |
| 6 | Michael |
+---------+-----------+
6 rows in set (0.00 sec)
MySQL (Current example) :: SELECT * FROM user
-> ORDER BY
-> IF(FIELD(user_id,1,4,5)=0,99999,FIELD(user_id,1,4,5)),user_name;
+---------+-----------+
| user_id | user_name |
+---------+-----------+
| 1 | Peter |
| 4 | Tim |
| 5 | George |
| 2 | John |
| 3 | Luke |
| 6 | Michael |
+---------+-----------+
6 rows in set (0.00 sec)
MySQL (Current example) ::
试试看
更新2011-07-26 13:37美国东部时间
如果列表的顺序很重要,只需根据需要编写列表即可
示例:如果需要按4,1,5顺序排列的列表,则查询应如下所示:
SELECT * FROM user
ORDER BY
IF(FIELD(user_id,4,1,5)=0,99999,FIELD(user_id,4,1,5)),user_name;
以下是使用相同样本数据执行的过程:
MySQL (Current example) :: SELECT * FROM user
-> ORDER BY
-> IF(FIELD(user_id,4,1,5)=0,99999,FIELD(user_id,4,1,5)),user_name;
+---------+-----------+
| user_id | user_name |
+---------+-----------+
| 4 | Tim |
| 1 | Peter |
| 5 | George |
| 2 | John |
| 3 | Luke |
| 6 | Michael |
+---------+-----------+
6 rows in set (0.00 sec)
MySQL (Current example) ::
可能会添加另一列进行排序,并给他们编号,然后按此新列进行排序。@Warface:恐怕用户id列表是动态的。每个用户都有一个不同的列表。@谢谢,这看起来就像我要找的一样!我会查出来的。当,揍我一顿。:)+1我会将ELSE
语句的结果设置为2,而不是user\u id
,尽管我选择了这个解决方案,将“ELSE user\u id”替换为“ELSE 2”。谢谢大家!你让我开心:)哈,事实上,这解释了为什么它忽略了我的分类指令:P谢谢,谢谢+1为您的麻烦:)感谢Cybernate和gbn,我已经有了一个有效的查询,但我会看看性能差异。
MySQL (Current example) :: SELECT * FROM user
-> ORDER BY
-> IF(FIELD(user_id,4,1,5)=0,99999,FIELD(user_id,4,1,5)),user_name;
+---------+-----------+
| user_id | user_name |
+---------+-----------+
| 4 | Tim |
| 1 | Peter |
| 5 | George |
| 2 | John |
| 3 | Luke |
| 6 | Michael |
+---------+-----------+
6 rows in set (0.00 sec)
MySQL (Current example) ::