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。videoid
"到新位置2是属于另一个videopos
变量$oldPos
的视频ID,让我们说位置1。playlistvideo.plid
必须属于playlist.uploader
中的特定上传者,在本例中为上传者1。这意味着每次发生更改时,我都会逐步遍历所有上传者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查询可以管理这个还是我需要更多数据?
答案 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