MySQL обновить запрос списка воспроизведения возможно?

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 переменная $newPos между 1 и 6, скажем, 2.
  • Идентификатор видео videoid быть «перемещенным» в новую позицию, 2, это идентификатор видео, принадлежащий другому videopos переменная $oldPos Скажем, позиция 1.
  • идентификатор плейлиста playlistvideo.plid должен принадлежать конкретному загрузчику в playlist.uploaderв данном случае загрузчик 1.
  • Таким образом, видео id 1 получает позицию 2, нам не нужно возражать, что позиция видео id 2 одинакова, я повторяю процесс для всех них.

Так что это означает, что я буду шаг за шагом бегать по всем videoid : videoposс позиции 1 до N во всех плейлистах загрузчика 1 каждый раз, когда происходит изменение.

Вот пример данных, с которыми я могу работать, когда в первом списке воспроизведения позиция видео 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

Решение

Вы могли бы сделать следующее

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
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]