База данных с несколькими сортировками SQL, похожая на Excel

#mysql #sql #sorting

#mysql #sql #сортировка

Вопрос:

Прежде всего, я использую MYSQL.

В моей базе данных есть три таблицы: строки, столбцы, ячейки. Строки содержат только идентификатор, идентификатор столбцов и имя, но ячейки имеют решающее значение. Это выглядит так:

 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 значений.
Что я хотел бы сделать, так это получить список идентификаторов строк, отсортированных по нескольким таблицам, содержащим определенные значения.

Пример сортировки: 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 |
 

Есть ли у вас какие-либо ide, как обрабатывать такую сортировку?

Ответ №1:

эй, вы можете сделать порядок обращения с помощью

итак

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

это упорядочит ее по числовым значениям, соответствующим вашим заявлениям case, так что вы можете творчески упорядочить все, что захотите