【问题标题】:MySQLl key-value store ordering with specific condition具有特定条件的 MySQL 键值存储排序
【发布时间】:2019-05-13 18:44:08
【问题描述】:

我有以下结构:

+----------+--------+---------------------+
| id| gr_id| name   | value               |
+----------+--------+---------------------+
| 1  |  11 | name   | Burro               |
| 2  |  11 | submit | 2019/05/10          |
| 3  |  11 | date   | 2019/05/17          |   
| 4  |  12 | name   | Ajax                |
| 5  |  12 | submit | 2019/05/10          |
| 6  |  12 | date   | 2019/05/18          | 
+----------+--------+---------------------+

我必须按日期排序(如果名称是日期),从最高到最低日期,还必须保留组(gr_id)而不混合元素。

想要的结果如下所示:

+----------+--------+---------------------+
| id| gr_id| name   | value               |
+----------+--------+---------------------+
| 4  |  12 | name   | Ajax                |
| 5  |  12 | submit | 2019/05/10          |
| 6  |  12 | date   | 2019/05/18          |   
| 1  |  11 | name   | Burro               |
| 2  |  11 | submit | 2019/05/10          |
| 3  |  11 | date   | 2019/05/17          | 
+----------+--------+---------------------+

我该如何实现?

【问题讨论】:

  • 您的意思是让 id 值不与其余值一起移动吗?
  • 对不起,我弄错了,我更正了

标签: mysql sql-order-by key-value-store


【解决方案1】:

您必须将组排序标准与组的所有元素相关联。您可以通过子查询或连接来完成。

子查询版本:

SELECT t.*
FROM (SELECT gr_id, value as `date` FROM t WHERE `name` = 'date') AS grpOrder
INNER JOIN t ON grpOrder.gr_id = t.gr_id
ORDER BY grpOrder.`date`
, CASE `name` 
   WHEN 'name' THEN 1 
   WHEN 'submit' THEN 2
   WHEN 'date' THEN 3
   ELSE 4
 END

加入版本:

SELECT t1.*
FROM t AS t1
INNER JOIN AS t2 ON t1.gr_id = t2.gr_id AND t2.`name` = 'date'
ORDER BY t2.value
, CASE t1.`name` 
   WHEN 'name' THEN 1 
   WHEN 'submit' THEN 2
   WHEN 'date' THEN 3
   ELSE 4
 END

【讨论】:

  • 非常感谢您的帮助,再问一个问题,您知道像您一样掌握我的 mysql 的好资源吗?
  • 不客气,感谢您的夸奖。大学向我介绍了基础知识,并在此基础上进行了十多年的工作。我真的不知道有什么好的在线学习资源,但我是那种通常可以阅读文档并从中找出东西的人,所以建议 MySQL 的官方在线文档作为一个很好的起点。否则,我发现潜伏在我不太熟悉的主题上是非正式地了解这些主题的好方法。
  • 感谢您的详细回答。有时我觉得我没有意义去解决任务。我知道基础知识,但不需要以特定方式使用,这对我来说可能是个问题。谢谢你让我大开眼界
猜你喜欢
  • 1970-01-01
  • 2020-01-22
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 2021-04-27
  • 2020-10-18
  • 2021-02-18
  • 1970-01-01
相关资源
最近更新 更多