Переместить файлы из одной ноды в другую

Главные вкладки

Аватар пользователя PopoFF PopoFF 18 февраля 2008 в 3:19

А, вот случилась маленькая проблемка. Человек создал ноду и прикрепил к ноде около 10-ка файлов общим весом на 50 метров. Средств для изменения типа материала я не нашел, да и проблему хотелось решить максимально быстро.
За информацию о загружаемых файлах отвечают две таблицы: files (таблица с информацией о файле: размер,название, путь, нода к которой прикреплен файл и т.д.) и file_revisions (информация о файле в различных версиях ноды).

Опишу процедуру на примере. Например, у нас есть нода1 (nid=1) с неправильным типом материала и кучей файлов, привязанной к этой ноде. Нам нужно получить ноду с таким же содержимым, но другого типа материала, при этом не гонять файлы между клиентом и сервером.

  1. Создаем ноду нужного типа. Пусть это будет нода2 (nid=2)
  2. Перепривязываем все файлы к новой ноде с помощью SQL-запроса:
    UPDATE files SET nid=2 WHERE nid=1
    Теперь у нас все файлы привязаны к нода2. НО нода2 пока не знает, как отображать информацию о файлах для текущей версии ноды. Исправим это.
  3. Узнаем теущие значения vid (версии) для обоих нод с помощью запроса:
    SELECT vid FROM node WHERE nid IN (1,2)
    Пускай нода1 имеет vid=3, нода2 имеет vid=4
  4. Перепривязываем информацию о версии для файлов с помощью запроса:
    UPDATE file_revisions SET vid=4 WHERE vid=3
  5. Удаляем нода1
  6. Пользуемся нода2

Комментарии

Аватар пользователя VladSavitsky VladSavitsky 18 февраля 2008 в 22:02

Nodetype - модуль позволяет менять тип документа (ноды).
Если нужно перекинуть файлы между нодами или версиями ноды:
1. Сделайте бекап базы
2. Откройте в phpMyAdmin и ручками перенесите инфу из одной ноды (версии) в другую.
Или вы хотите писать скрипты для задачи, которая больше может никогда не повториться?!

Аватар пользователя PopoFF PopoFF 19 февраля 2008 в 11:09

Я не захотел устанавилвать модуль только из-за одной разовой операции, как я уже написал. Не понятен 2-й пункт в описанных вами действиях. Перенести - это выполнить какие-то запросы к БД. Какие запросы нужно выполнить в вашем 2-м пункте?