table myvalue_order ---------------------- order_number |价值 1 | B 2 | A 3 | C $ / $ ---------------------- 然后使用加入,比如这个: 选择mytable。*来自mytable,value_order 其中mytable.myvalue = value_order.value by myvalue_order。 order_number; 请注意,如果使用这样的查询,则根本不显示使用 order_number的值的行。如果你想获得那些 值,你可以使用: 选择mytable。*来自mytable 左外连接mytable.myvalue = value_order.value上的value_order by myvalue_order.order_number; 但是这会在第一个位置放置没有订单号的行。你 当然可以使用相反的订单号 table myvalue_order ------------ ---------- order_number |价值 3 | B 2 | A 1 | C $ / $ ---------------------- 然后再做...订单by order_number desc; 空值应位于列表的底部。 是否 SELECT * FROM mytable ORDER BY if(myvalue ='' A',2,......); 工作? Hello, I have a table, say ----------ID|myvalue----------1|B2|C3|A4|A5|B6|C---------- Is it possible to perform a SELECT statement so that the output getsordered by column "myvalue" by B, then A, then C ? Someting like:SELECT * FROM mytable ORDER BY myvalue(''B'',''A'',''C''); This is only an example of course but I wonder if this principle werepossible. thanks,Bart 解决方案 One way is to create another table, where you tell in what order valuesshould be: table myvalue_order----------------------order_number | value1 | B2 | A3 | C---------------------- And then use a join, like this: select mytable.* from mytable, value_orderwhere mytable.myvalue=value_order.valueorder by myvalue_order.order_number; Note that if a query like this is used, then rows where value withorder_number is used, are not displayed at all. If you want to get thosevalues also, you could use: select mytable.* from mytableleft outer join value_order on mytable.myvalue=value_order.valueorder by myvalue_order.order_number; But this would place rows without order number at the first place. Youcould of course use opposite order numbers table myvalue_order----------------------order_number | value3 | B2 | A1 | C---------------------- And then do ... order by order_number desc; And null values should be at the bottom of the list. One way is to create another table, where you tell in what order valuesshould be: table myvalue_order----------------------order_number | value1 | B2 | A3 | C---------------------- And then use a join, like this: select mytable.* from mytable, value_orderwhere mytable.myvalue=value_order.valueorder by myvalue_order.order_number; Note that if a query like this is used, then rows where value withorder_number is used, are not displayed at all. If you want to get thosevalues also, you could use: select mytable.* from mytableleft outer join value_order on mytable.myvalue=value_order.valueorder by myvalue_order.order_number; But this would place rows without order number at the first place. Youcould of course use opposite order numbers table myvalue_order----------------------order_number | value3 | B2 | A1 | C---------------------- And then do ... order by order_number desc; And null values should be at the bottom of the list. Does SELECT * FROM mytable ORDER BY if(myvalue=''A'', 2, ...); work? 这篇关于操纵ORDER BY的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
09-18 22:47