对于您的问题中的示例数据,可以用简单的方式显示结果,但如果data
值的差异更大,并且您希望它们在不同位置进行洗牌并放置,则必须在您的应用程序级别或存储过程中。
对于少量的数据如在你的例子,如果数据'A'
不重复,该溶液可以是:
mysql> select * from
-> (
-> select 1 as id, 'A' as data
-> UNION ALL select 18, 'D'
-> UNION ALL select 17, 'C'
-> UNION ALL select 10, 'B'
->) table_name
-> order by field(data, 'C', 'A') desc, data;
+----+------+
| id | data |
+----+------+
| 1 | A |
| 17 | C |
| 10 | B |
| 18 | D |
+----+------+
如果'A'
重复几次,相同的查询结果如下。但检查数据行'C'
所在的行是否已排在'A'
行之后。
mysql> select * from
-> (
-> select 26 as id, 'X' as data
-> UNION ALL select 1, 'A'
-> UNION ALL select 18, 'D'
-> UNION ALL select 17, 'C'
-> UNION ALL select 10, 'B'
-> UNION ALL select 15, 'A'
-> UNION ALL select 25, 'C'
->) table_name
-> order by field(data, 'C', 'A') desc, data;
+----+------+
| id | data |
+----+------+
| 1 | A |
| 15 | A |
| 17 | C |
| 25 | C |
| 10 | B |
| 18 | D |
| 26 | X |
+----+------+
您的预期结果结果? –
如果“c-> down” - 那么为什么在'A'和'B'之间?我认为它应该在'D'之后。还是关于'ID'? (即“down”=“在一个位置上减少ID”) –
是否有任何外键引用“ID”?更新级联? –