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