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

时间:2017-03-02 22:34:53

标签: php mysql playlist

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

我在 playlistvideo 表中有这两个表(以及其他)和我试图更新视频的位置。我需要遵循这些"条件/约束":

  • 新视频位置videopos是1到6之间的变量$newPos,让我们说2。
  • 要移动的视频ID videoid"到新位置2是属于另一个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查询可以管理这个还是我需要更多数据?

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作

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