首先我使用的是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/