MySQL由Rand()在结果顶部排序

时间:2016-04-21 14:17:43

标签: mysql sql mysqli

我的表中有一个条目列表。有些条目很特别,有一个标记" is_premium"设为true。我现在想要从我的表中获取一个列表,其中所有高级条目都在顶部,但也由兰特订购。 问题是在保费条目之后应该显示正常条目。但他们不应该被分类兰特。它们应该按照published_date和update_datetime等属性进行排序。

我目前的解决方案是这个查询:

SELECT
   first_table.*            
FROM
   first_table            
WHERE
   CURDATE() BETWEEN published_date AND DATE_ADD(published_date,INTERVAL valid_days DAY)            
ORDER BY
   is_premium DESC,
   (CASE WHEN is_premium THEN rand()END)
   published_date DESC,
   update_date DESC

我现在的问题是,不仅高级条目设置了排序值,还设置了正常条目。我不知道如何解决这个问题。

- - - - - - - - EDIT 感谢Gordon Linoff,我找到了解决方案。

import json

body = '{"mode":"sync","message":"43b","messages":[{"node1":44,"node2":45}]}'
j = json.loads(body)

v1 = "foo"
v2 = "bar"

j["messages"][0]["node1"] = v1
j["messages"][0]["node2"] = v2

print(json.dumps(j))

1 个答案:

答案 0 :(得分:1)

我认为您只需要一个额外的ORDER BY密钥:

ORDER BY is_premium DESC,
         (CASE WHEN is_premium THEN rand() END),
         sorting DESC,
         published_date DESC,
         update_date DESC