#mysql #sql #count #sql-update #mariadb
#mysql #sql #количество #sql-обновление #mariadb
Вопрос:
Что у меня есть:
Привет, ребята, у меня есть две таблицы.
# 1 model
Где я храню все модели
--------------- ---------
| id | name | order |
--------------- ---------
| 1 | Model #1 | null |
| 2 | Model #2 | null |
| 3 | Model #3 | null |
| 4 | Model #4 | null |
--------------- ---------
# 2 video_models_model
, который соединяет model
и video
таблицу (видео теперь не связано)
--------- ---------
| videoId | modelId |
--------- ---------
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
| 6 | 3 |
--------- ---------
до сих пор всегда, когда мне нужны были модели, я заказывал их в зависимости от того, во скольких видео они используются
SELECT * FROM model ORDER BY (
SELECT COUNT(*) FROM video_models_model WHERE modelId = model.id
) DESC;
Что мне нужно:
Однако я обнаружил, что иногда мне нужно вручную изменить положение некоторых моделей. Из-за этого я создал новый столбец `порядок` и буду использовать его для упорядочивания вещей вместо запроса выше. Однако из-за того, что в 99% случаев все останется так, как было до сих пор, есть ли способ использовать запрос выше для обновления столбца `порядок`?
Другими словами, мне нужен какой-то запрос, который создаст это в model
таблице.
--------------- ---------
| id | name | order |
--------------- ---------
| 1 | Model #1 | 4 |
| 2 | Model #2 | 3 |
| 3 | Model #3 | 2 |
| 4 | Model #4 | 1 |
--------------- ---------
Ответ №1:
Вы можете использовать коррелированный подзапрос:
update model
set `order` = (
select count(*) from video_models_model vmm where vmm.modelid = model.id
)
Боковой узел: order
является зарезервированным словом в MySQL, следовательно, плохой выбор для имени столбца (вам нужно окружить его обратными метками везде, где вы его используете).
Комментарии:
1. Работает отлично! Примет этот ответ через 8 минут (как только смогу)