#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, так что вы можете творчески упорядочить все, что захотите