2012-05-04 2 views
0

В настоящее время я делаю публичный справочник по PHP с использованием MySQL. Иногда спамеры меняют вещи, и я хотел бы вернуться к предыдущей версии страницы.SQL удалите спам-строку, обновите последнюю строку

Все версии страниц хранятся, поэтому моя проблема - это просто запрос.

UPDATE pages new, pages old SET new.status='2',old.status='1' WHERE new.ip='<spambotip>' AND new.status='0' AND old.title=new.title AND old.status='1' AND old.last_modified IN (SELECT max(last_modified) FROM pages tr WHERE tr.title = new.title AND tr.status='0') 

Однако я получаю следующее сообщение об ошибке:

You can't specify target table 'new' for update in FROM clause 

Мой запрос предназначен для поиска всех страниц со статусом = 1 (активной), что спамбот сделал, установить статус этой страницы на 2 (вредную) , затем найдите страницу с наивысшим last_modified, с тем же заголовком и статусом 0 (неактивно) и установите его статус на 1.

Мне кажется, мне нужно использовать внутренние циклы, но у меня возникают проблемы с представлением о том, как это можно сделать сделайте. Я немного искал Google, но не нашел ничего, что мог бы использовать.

Любая помощь приветствуется, спасибо!

+0

Как бы один соединить старую и новую версию той же странице? Они имеют один и тот же идентификатор? –

ответ

0

отредактирован:

Dim sList as String = ... SELECT group_concat(title) FROM pages WHERE ip='<spambotip>' 

UPDATE pages SET staus=2 where title IN (...) 

UPDATE pages SET status=1 where id IN (SELECT id from (SELECT id, max(last_modified) from pages where title in (...) and status=0 group by title) x) 
+0

Это не работает ни D: # 1054 - Неизвестный столбец 'new.title' в 'where clause' –

+0

отредактирован для другого варианта. –

Смежные вопросы