0

現在、MySQL を使用して PHP で公開リファレンス ガイドを作成しています。スパマーが内容を変更することがあるので、以前のバージョンのページに戻したいことがあります。

ページのすべてのバージョンが保存されるため、私の問題はクエリだけです。

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')

ただし、次のエラーが表示されます。

FROM 句で更新対象のテーブル 'new' を指定することはできません

私のクエリは、スパムボットが作成した status = 1 (アクティブ) のすべてのページを検索し、そのページのステータスを 2 (ジャンク) に設定してから、last_modified が最も高く、同じタイトルで、ステータスが 0 (非アクティブ) のページを見つけることを意図しています。そのステータスを 1 に設定します。

内部ループを使用する必要があると思いますが、それを行う方法を想像するのに問題があります。私は少しグーグルで調べましたが、使用できるものは見つかりませんでした。

どんな助けでも大歓迎です。

4

1 に答える 1

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 )
于 2012-05-04T09:54:23.843 に答える