だいぶ昔、itemidの欠番を空のドラフトアイテムとして回収できるスクリプトを作った話を書いたのですが、そのままお蔵入りになっていたのでいまさらながら公開しておきます。
まぁ、番号が飛び飛びでもそんなに困らないと思うんですけど、几帳面な人向けなのかなぁ。言わなくてもわかると思いますが、基本的に自己責任でお願いします。
† 使い方
1.上記のプログラムをconfig.phpと同じフォルダに入れる。
ファイル名は同じでなくても大丈夫ですが、冒頭のブログId, 著者Id, カテゴリIdについては適当なものに書き換えてください。
2.コマンドラインもしくはブラウザからプログラムにアクセスする。
実行に成功すると、SQL文が表示されますがあまり気にしなくて大丈夫です。
3.管理画面にログインすると、回収したidのエントリがドラフトとして追加されている。
† スクリプト本体
collector.php
<?php
$blogId = 1;
$authorId = 1;
$catId = 1;
include('./config.php');
$query = "select max(inumber) as max from ".sql_table('item');
$res = sql_query($query);
$row = mysql_fetch_assoc($res);
$ids = Range(1,$row['max']-1);
$query = "select inumber from ".sql_table('item');
$res = sql_query($query);
$existids = Array();
while( $row = mysql_fetch_assoc($res) ){
$existids[] = $row['inumber'];
}
$notexist = array_diff($ids, $existids);
foreach($notexist as $id){
$query = "INSERT INTO ".sql_table('item')." VALUES ($id, '', 'dummy', '', $blogId, $authorId, '1970-01-01 09:00:00', 0, 1, 0, $catId
, 0)";
echo $query . "\n";
mysql_query($query);
}
† v3.3向け
v3.3からはitemにipostedカラムが追加されているので、上記のスクリプトでは欠番がうまく回収できませんので、下記のスクリプトを使います。
collector.php
<?php
$blogId = 1;
$authorId = 1;
$catId = 1;
include('./config.php');
$query = "select max(inumber) as max from ".sql_table('item');
$res = sql_query($query);
$row = mysql_fetch_assoc($res);
$ids = Range(1,$row['max']-1);
$query = "select inumber from ".sql_table('item');
$res = sql_query($query);
$existids = Array();
while( $row = mysql_fetch_assoc($res) ){
$existids[] = $row['inumber'];
}
$notexist = array_diff($ids, $existids);
foreach($notexist as $id){
$query = "INSERT INTO ".sql_table('item')." VALUES ($id, '', 'dummy', '', $blogId, $authorId, '1970-01-01 09:00:00', 0, 1, 0, $catId
, 0, 1)";
echo $query . "\n";
mysql_query($query);
}