У меня есть таблица sliders
.
+----+-----+---------+
| id | pos | content |
+----+-----+---------+
| 1 | 0 | image |
+----+-----+---------+
| 2 | 1 | image |
+----+-----+---------+
| 3 | 2 | video |
+----+-----+---------+
| 4 | 3 | video |
+----+-----+---------+
| 5 | 4 | image |
+----+-----+---------+
То, что я хотел, чтобы эти записи были в следующем порядке:
- Изображение
- Видео
- ... все остальное
В настоящее время у меня есть позиция столбца pos
.Он упорядочен по номеру, в котором 0 является первым, а наибольшее - последним.
Мне нужно изменить его порядок, используя один запрос, но в настоящее время я использую 3 запроса для этого.
Во-первых, это: UPDATE sliders SET pos = pos + 2
Это вернет:
+----+-----+---------+
| id | pos | content |
+----+-----+---------+
| 1 | 2 | image |
+----+-----+---------+
| 2 | 3 | image |
+----+-----+---------+
| 3 | 4 | video |
+----+-----+---------+
| 4 | 5 | video |
+----+-----+---------+
| 5 | 6 | image |
+----+-----+---------+
Затем я найду первое видео и первое изображение, чтобы установить их положение как первое и второе.
UPDATE sliders SET pos = 0 WHERE id = (SELECT MIN(id) FROM sliders WHERE content='image')
UPDATE sliders SET pos = 1 WHERE id = (SELECT MIN(id) FROM sliders WHERE content='video')
Это вернется:
+----+-----+---------+
| id | pos | content |
+----+-----+---------+
| 1 | 0 | image |
+----+-----+---------+
| 2 | 2 | image |
+----+-----+---------+
| 3 | 1 | video |
+----+-----+---------+
| 4 | 5 | video |
+----+-----+---------+
| 5 | 6 | image |
+----+-----+---------+
Я не против, если есть пробелы, пока это в порядке.
Вопрос в том, есть лиДругой способ сделать это, если возможно, один запрос без пробелов или что-нибудь?
Ожидаемый результат:
+----+-----+---------+
| id | pos | content |
+----+-----+---------+
| 1 | 0 | image |
+----+-----+---------+
| 2 | 2 | image |
+----+-----+---------+
| 3 | 1 | video |
+----+-----+---------+
| 4 | 3 | video |
+----+-----+---------+
| 5 | 4 | image |
+----+-----+---------+
Если нет другого пути, я думаю, яможно придерживаться 3 запросов.