對於您的問題中的示例數據,可以用簡單的方式顯示結果,但如果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」?更新級聯? –