playlist
+----+----------+---------------+
| id | uploader | name |
+----+----------+---------------+
| 1 | 1 | Testplaylist1 |
| 2 | 1 | ... |
+----+----------+---------------+
playlistvideo
| id | plid | videoid | videopos |
+----+------+---------+----------+
| 1 | 1 | 1 | 1 |
| 2 | 1 | 2 | 2 |
| 3 | 1 | 3 | 3 |
| 4 | 1 | 4 | 4 |
| 5 | 1 | 5 | 5 |
| 6 | 1 | 6 | 6 |
| 7 | 2 | ... | ... |
+----+------+---------+----------+
我有这两个表(以及其他表),我正在尝试更新播放列表视频表中视频的位置。我需要遵循这些“条件/约束”:
- 新视频位置
videopos
是一个介于 1 和 6 之间的变量$newPos
,假设为 2。 - 要“移动”到新位置 2 的视频 ID
videoid
是属于另一个videopos
变量$oldPos
的视频 ID > ,假设位置 1。 - 播放列表 ID
playlistvideo.plid
必须属于playlist.uploader
中的特定上传者,在本例中为上传者 1。 - 因此视频 id 1 获得位置 2,我们不必介意视频 id 2 的位置相同,我正在对所有视频重复该过程。
这意味着每次发生更改时,我都会逐步遍历所有上传者 1 的播放列表中从位置 1 到 N 的所有 videoid : videopos
。
这是我可以使用的示例数据,在第一个播放列表中,视频位置 2 已移动到视频位置 1。您可以看到位置稍微向下重新启动,这意味着我们位于第二个播放列表中并且没有发生任何移动。这是来自一个数组,其中数组索引 ($newPos
) 充当每个播放列表中的视频位置。
newPos: 1 oldPos: 2
newPos: 2 oldPos: 1
newPos: 3 oldPos: 3
newPos: 4 oldPos: 4
newPos: 5 oldPos: 5
newPos: 6 oldPos: 6
newPos: 1 oldPos: 1
newPos: 2 oldPos: 2
newPos: 3 oldPos: 3
newPos: 4 oldPos: 4
MySQL 查询可以管理这个问题还是我需要更多数据?
最佳答案
您可以执行以下操作
if ($newPos > $oldPos)
{
$query = "UPDATE playlistvideo SET videopos = IF(videopos = $oldPos, $newPos, videopos -1) WHERE videopos >= $oldPos AND videopos <= $newPos";
}
else if ($newPos < $oldPos)
{
$query = "UPDATE playlistvideo SET videopos = IF(videopos = $oldPos, $newPos, videopos +1) WHERE videopos >= $newPos AND videopos <= $oldPos";
}
如果完全用 SQL 来完成,则为
UPDATE playlistvideo
SET videopos = IF(videopos = $oldPos, $newPos, videopos + IF($oldPos > $newPos,1,IF($oldPos = $newPos, 0, -1)))
WHERE videopos BETWEEN $newPos AND $oldPos
关于php - MySQL更新播放列表查询可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42567298/