根据另一个查询的ORDER更新列值



我所拥有的:

嗨,伙计们,我有两张桌子。

#1model存储所有型号的位置

+---------------+---------+
| id | name     |  order  |
+---------------+---------+
|  1 | Model #1 |   null  |
|  2 | Model #2 |   null  |
|  3 | Model #3 |   null  |
|  4 | Model #4 |   null  |
+---------------+---------+

#2个连接modelvideo表的video_models_model(视频现在不相关(

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

我需要什么:

然而,我发现有时我需要手动更改某些模型的位置。因此,我创建了新的列"order",并将使用它来排序,而不是上面的查询。然而,因为事实上,在99%的情况下,一切都会保持原样,直到现在,有没有办法使用上面的查询来更新"顺序"列?换句话说,我需要一些查询来在model表中创建它。

+---------------+---------+
| id | name     |  order  |
+---------------+---------+
|  1 | Model #1 |    4    |
|  2 | Model #2 |    3    |
|  3 | Model #3 |    2    |
|  4 | Model #4 |    1    |
+---------------+---------+

您可以使用相关的子查询:

update model
set `order` = (
select count(*) from video_models_model vmm where vmm.modelid = model.id
)

侧节点:order在MySQL中是一个保留字,因此列名的选择很糟糕(在使用它的任何地方都需要用反勾号将其括起来(。

最新更新