我在 MYSQL 中有一个表,我需要对其执行选择,然后通过相当复杂的逻辑对其进行排序。这是我的逻辑示例:
if(column_a is not null && column_a > 0){
var_a = column_a
else
var_a = 1;
if(column_a is not null){
var_b = column_b
else
var_b = 0
if(column_c is not null){
var_c = column_c
else
var_c = column_d
按 (var_b*var_c)/var_a 排序
所以基本上,我想按照 SELECT * from mytable WHERE parameter = value ORDER BY variable_to_order_by 的方式做一些事情。我将不得不为 variable_to_order_by 使用一些公式,但我找不到任何不涉及八个单独的 CASE WHERE 语句的方法,这看起来非常困惑。还有其他建议吗?
谢谢!
最佳答案
对于一种卑鄙的方式,您可以在 order by
子句中使用函数。具体来说,可以使用if
和ifnull
函数。因此,您应该能够执行以下操作:
SELECT ...
ORDER BY IF(some_value IS NOT NULL AND some_value RLIKE '^[[:digit:]]+$', some_value, other_value)
- (column_baz + IF(foo > bar, a, b))/(IFNULL(yet_another_value, 0) + IF(foo > bar, a, b))
(如果您想要包含所有实数而不仅仅是整数,如果您不想包含以 0 开头的字符串等,则正则表达式可能必须更复杂)
关于mysql - 如何通过查询编写复杂的订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7145501/