mysql - 类似excel的SQL多排序数据库

标签 mysql sql sorting

首先我使用的是MYSQL。

我的数据库有三个表:行、列、单元格。行仅包含 id、列 id 和名称,但单元格至关重要。它看起来像这样:

id | rowId | columnId | value1 | value2 | value3 | value4 | value5 |
--------------------------------------------------------------------
 1 |     1 |        1 |     v1 |     v2 |     v3 |     v4 |     v5 |
--------------------------------------------------------------------
 2 |     1 |        2 |     v5 |     v6 |     v7 |     v8 |     v9 |
--------------------------------------------------------------------
 3 |     2 |        1 |    v10 |    v12 |    v13 |    v14 |    v15 |
--------------------------------------------------------------------
 4 |     2 |        2 |     v1 |     v2 |     v3 |     v4 |     v5 |
--------------------------------------------------------------------
 5 |     3 |        1 |     v5 |     v6 |     v7 |     v8 |     v9 |
--------------------------------------------------------------------
 6 |     3 |        2 |    v10 |    v12 |    v13 |    v14 |    v15 |
--------------------------------------------------------------------

它表示具有 6 个单元格(2 列和 3 行)的表格,每个单元格包含 5 个值。 我想做的是获取按包含某些值的多个表排序的行 id 列表。

排序示例: value1=v10 且 columndId=1, value4=v8 且 columndId=2, 并以任意顺序休息

输出:

id | rowId | columnId | value1 | value2 | value3 | value4 | value5 |
--------------------------------------------------------------------
 3 |     2 |        1 |    v10 |    v12 |    v13 |    v14 |    v15 |
 2 |     1 |        2 |     v5 |     v6 |     v7 |     v8 |     v9 |
 6 |     3 |        2 |    v10 |    v12 |    v13 |    v14 |    v15 |

所以右行顺序是 2 -> 1 -> 3

我得到的是这个 SQL 查询:

SELECT rowId FROM cells WHERE
    columnId = 1 OR
    columnId = 2 OR
ORDER BY value1 = v10, value4 = v8;

但它给了我这个输出:

id | rowId | columnId | value1 | value2 | value3 | value4 | value5 |
--------------------------------------------------------------------
 3 |     2 |        1 |    v10 |    v12 |    v13 |    v14 |    v15 |
 6 |     3 |        2 |    v10 |    v12 |    v13 |    v14 |    v15 |
 2 |     1 |        2 |     v5 |     v6 |     v7 |     v8 |     v9 |
 5 |     3 |        1 |     v5 |     v6 |     v7 |     v8 |     v9 |
 1 |     1 |        1 |     v1 |     v2 |     v3 |     v4 |     v5 |
 4 |     2 |        2 |     v1 |     v2 |     v3 |     v4 |     v5 |

你有什么想法可以处理这种排序吗?

最佳答案

嘿,您可以通过以下方式下订单:

所以

order by case when value1=v10 then 1
              when value14=v8 then 2
              when something=v2 then 3
         end

这将按与您的案例陈述相对应的数值对其进行排序,因此您可以创造性地订购您想要的任何内容

关于mysql - 类似excel的SQL多排序数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24293894/

相关文章:

mysql - 无法连接到工作台中的 mysql 数据库,但我可以连接到 phpmyadmin 中的数据库

PHP 多维数组帮助

javascript - 在 Javascript 中对数组进行排序时出现意外错误

mysql - 查询从具有添加约束的单个列中获取不同的对

sql - SQL查询以选择不喜欢颜色变体的颜色

performance - 获取最大前 k 值

algorithm - 最好的连续排序算法?

mysql : Can the balance ever get negative

java - Spring MVC 、Tomcat 和 mysql 的开发环境

基于指定表列的 SQL 外键