MySQL 可以更新播放列表查询吗?

MySQL update playlist query possible?

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

我有这两个 table(以及其他),我正在尝试更新视频播放列表视频[中的位置=38=] table。我需要遵循这些 "conditions/constraints":

  • 新的视频位置 videopos 是一个变量 $newPos 介于 1 和 6 之间,比方说 2。
  • 要"moved"到新位置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