我所拥有的:
嗨,伙计们,我有两张桌子。
#1model
存储所有型号的位置
+---------------+---------+
| id | name | order |
+---------------+---------+
| 1 | Model #1 | null |
| 2 | Model #2 | null |
| 3 | Model #3 | null |
| 4 | Model #4 | null |
+---------------+---------+
#2个连接model
和video
表的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中是一个保留字,因此列名的选择很糟糕(在使用它的任何地方都需要用反勾号将其括起来(。