MySQLl порядок хранения значений ключей с определенным условием - PullRequest
0 голосов
/ 13 мая 2019

У меня есть следующая структура:

+----------+--------+---------------------+
| 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          | 
+----------+--------+---------------------+

Как я могу это реализовать?

1 Ответ

1 голос
/ 13 мая 2019

Вам нужно будет связать критерии упорядочения группы со всеми элементами группы. Вы можете сделать это через подзапрос или объединение.

Версия подзапроса:

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
...