Вики хранит все изменения над статьей.
Простейший алгоритм:
1) в таблице статей добавить колонки
- status типа int: version = 0, publish = 1, delete = 2, hide = 3, draft = 5 ... (только первые 2 нужны тебе, остальное навороты)
- version = max(version) + 1 для новых версий, либо указание последней проверенной version для publish
- moderated (0 - еще нет, 1 - прошла модерацию успешно, 2 - фу, гадость)
- parent_id - для поста типа version указываем post.id
2) при изменении добавляем post со статус = 0, колонке version присваиваем последний максимальный version + 1 и задаём parent_id
3) при модерации делаем джойн таблицы на себя по условию ON t1.id = t2.parent_id and t1.version < t2.version
и отфильтровка только max(t2.version)
- при успехе апдейтим publish post по колонкам text, title, datechange ... version
и ставим moderated для поста типа version
PS: можно попробовать версии вынести в отдельную таблицу (особенно актуально при большом количестве постов) приерно с тем же алгоритмом
в более сложном конфиге вместо полного текста всех версий, хранить только diff