分類付き m_sakumotsu
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
OhYeah!
投稿数: 983
オンライン

kabe さんの書かれていた FAMIC の作物概念図から、m_sakumotsu テーブルを作成するためのクエリーを自動生成するスクリプトを作りました。
まだ、HTML から SQL へ変換する部分だけで、概念図の更新チェックなどはこれからです。ふりがなや別名にも対応していません。
とりあえずは、下記 URL でお試しください。
http://macs.o-ya.net/data/m_sakumotsu.php
まだ、HTML から SQL へ変換する部分だけで、概念図の更新チェックなどはこれからです。ふりがなや別名にも対応していません。
とりあえずは、下記 URL でお試しください。
http://macs.o-ya.net/data/m_sakumotsu.php
<?php
$url = 'http://www.acis.famic.go.jp/ddata/sakumotugainen.htm';
mb_internal_encoding('utf8');
header('Content-Type: text/plain; charset=Shift_JIS');
echo <<<EOM
--/d
drop table if exists m_sakumotsu;
create table m_sakumotsu (idsaku integer primary key autoincrement, id1 integer, id2 integer, id3 integer, id4 integer, id5 integer, sakumotsu varchar);
begin transaction;
EOM;
$trs = explode('</tr>', str_replace(array("\r", "\n"), '', mb_convert_encoding(file_get_contents($url), 'utf8', 'auto')));
array_shift($trs);
while ($tr = array_shift($trs)) {
if (strpos('階層', $tr) > 0) continue;
$tds = preg_split('{</td>}i', $tr);
if (count($tds) <= 2) continue;
$level = 0;
while ($td = array_shift($tds)) {
$str = preg_replace('/.*>/', '', $td);
if ($str == '│') {
$level++;
continue;
}
if ($str == '') {
if (preg_match('/colspan=[\'\"]?([0-9]+)[\'\"]?/', $td, $matches)) {
$level += $matches[1];
} else {
$level++;
}
continue;
}
if ($str == '├' || $str == '└') {
$id[$level]++;
for($i = $level + 1; $i <= 4; $i++) $id[$i] = 0;
$td = array_shift($tds);
$item = mb_convert_encoding(mb_convert_kana(preg_replace('/.*>/', '', $td), 'KVA'), 'sjis-win', 'utf8');
echo sprintf("insert into m_sakumotsu (id1, id2, id3, id4, id5, sakumotsu) values (%d, %d, %d, %d, %d, '%s');\n", $id[0], $id[1], $id[2], $id[3], $id[4], $item);
break;
}
}
}
echo "commit;\n";
?>
投票数:7
平均点:5.71
OhYeah!
投稿数: 983
オンライン

FAMIC の作物概念図から作物マスターテーブル作成クエリーを自動生成するスクリプトの新版です。下記の点が変更されています。
1. クエリーのコメントに作物概念図の更新日を追加
2. 作物名に含まれるスペースや()[]を、現在の m_sakumotsu テーブルと同様に半角に変換するように変更
3. If-Modified-Since 及び Etag による更新チェックに対応
前バージョン同様、下記で試せます。
http://macs.o-ya.net/data/m_sakumotsu.php
実際に m_sakumotsu を書き換えると ACFinder が使えなくなってしまうので、新作物マスターを評価できるように、m_sakumotsu2 テーブル作成クエリーを生成するスクリプトもあります。
http://macs.o-ya.net/data/m_sakumotsu2.php
1. クエリーのコメントに作物概念図の更新日を追加
2. 作物名に含まれるスペースや()[]を、現在の m_sakumotsu テーブルと同様に半角に変換するように変更
3. If-Modified-Since 及び Etag による更新チェックに対応
前バージョン同様、下記で試せます。
http://macs.o-ya.net/data/m_sakumotsu.php
実際に m_sakumotsu を書き換えると ACFinder が使えなくなってしまうので、新作物マスターを評価できるように、m_sakumotsu2 テーブル作成クエリーを生成するスクリプトもあります。
http://macs.o-ya.net/data/m_sakumotsu2.php
<?php
/* 初期設定 */
$url = 'http://www.acis.famic.go.jp/ddata/sakumotugainen.htm';
$tbl = 'm_sakumotsu';
$sql = "./$tbl.qry";
$inc = './sakumotsu.inc.php';
mb_internal_encoding('utf8');
error_reporting(E_ALL & ~(E_WARNING | E_NOTICE | E_DEPRECATED));
if (file_exists($sql)) {
// 自動設定変数インクルード
if (file_exists($inc)) include_once $inc;
// If-Modified-Since より $lmdate が新しい場合は sql ファイルをそのまま出力
$reqheaders = apache_request_headers();
$sincedate = $reqheaders['If-Modified-Since'];
if ($sincedate) $since = strtotime($sincedate);
if ($lmdate) $lm = strtotime($lmdate);
if ($lm > $since) {
if ($lmdate) header("Last-Modified: $lmdate");
if ($etag) header("Etag: $etag");
header('Content-Type: text/plain; charset=Shift_JIS');
echo file_get_contents($sql);
exit;
}
}
/* FAMIC 作物概念 HTML を取得 */
// HTTP アクセスライブラリのロードと設定
require_once 'HTTP/Request.php';
$client = new HTTP_Request($url);
$client->setMethod(HTTP_REQUEST_METHOD_GET);
// $lmdate が空文字列でなければ If-Modified-Since リクエストヘッダを設定
if ($lmdate) $client->addHeader('If-Modified-Since', $lmdate);
// $etag が空文字列でなければ If-None-Match リクエストヘッダを設定
if ($etag) $client->addHeader('If-None-Match', $etag);
$client->sendRequest();
$code = $client->getResponseCode();
// レスポンスコードが 200 (Ok) 以外ならそのまま終了
if ($code != 200) {
if ($lmdate) header("Last-Modified: $lmdate");
if ($etag) header("Etag: $etag");
header('HTTP', true, $code);
exit;
}
// インクルードファイル出力
$lmdate = $client->getResponseHeader('last-modified'); // レスポンスヘッダの値を設定
$etag = $client->getResponseHeader('etag'); // レスポンスヘッダの値を設定
$data = "<?php\n";
if ($lmdate) $data .= "\$lmdate = '$lmdate';\n";
if ($etag) $data .= "\$etag = '$etag';\n";
$data .= "?>\n";
file_put_contents($inc, $data, LOCK_EX);
/* 作物概念 HTML -> SQL 変換 */
$trs = preg_split('{</tr>}i', str_replace(array("\r", "\n"), '', mb_convert_encoding($client->getResponseBody(), 'utf8', 'auto')));
// 作物概念更新日取得
$tds = preg_split('{</td>}i', array_shift($trs));
while ($td = array_shift($tds)) {
if (strpos($td, '年') === false) continue;
$td = preg_replace('/^.*?>/', '', $td);
$td = preg_replace('{<rt>.*?</rt>}i', '', $td);
$td = preg_replace('{<span.*?</span>}i', '', $td);
$td = preg_replace('{</?ruby>}i', '', $td);
$title = mb_convert_encoding("作物マスター $td", 'sjis-win', 'utf8');
break;
}
$data = "--/d\r\n";
$data .= "/* $title */\r\n";
$data .= "drop table if exists $tbl;\r\n";
$data .= "create table $tbl (idsaku integer primary key autoincrement, id1 integer, id2 integer, id3 integer, id4 integer, id5 integer, sakumotsu varchar);\r\n";
$data .= "begin transaction;\r\n";
// 作物階層取得
while ($tr = array_shift($trs)) {
if (strpos($tr, '階層') > 0) continue;
$tds = preg_split('{</td>}i', $tr);
if (count($tds) <= 2) continue;
$level = 0;
while ($td = array_shift($tds)) {
$str = preg_replace('/.*>/', '', $td);
if ($str == '│') {
$level++;
continue;
}
$str = str_replace(array(' ', ' '), '', $str);
if ($str == '') {
if (preg_match('/colspan=[\'\"]?([0-9]+)[\'\"]?/', $td, $matches)) {
$level += $matches[1];
} else {
$level++;
}
continue;
}
if ($str == '├' || $str == '└') {
$id[$level]++;
for($i = $level + 1; $i <= 4; $i++) $id[$i] = 0;
$td = array_shift($tds);
$item = mb_convert_encoding(mb_convert_kana(preg_replace('/.*>/', '', $td), 'KVas'), 'sjis-win', 'utf8');
$data .= sprintf("insert into $tbl (id1, id2, id3, id4, id5, sakumotsu) values (%d, %d, %d, %d, %d, '%s');\r\n", $id[0], $id[1], $id[2], $id[3], $id[4], $item);
break;
}
}
}
$data .= "commit;\r\n";
file_put_contents($sql, $data, LOCK_EX);
if ($lmdate) header("Last-Modified: $lmdate");
if ($etag) header("Etag: $etag");
header('Content-Type: text/plain; charset=Shift_JIS');
echo file_get_contents($sql);
投票数:3
平均点:6.67
OhYeah!
投稿数: 983
オンライン

http://macs.o-ya.net/data/m_sakumotsu2.php
で作成されるクエリーで m_sakumotsu2 テーブルを作成し、
引用:なばな類(なばな、はなっこりー、みずかけなを除く)
ひのき科(採種樹)
樹木類(つつじ類、まさき、さるすべり、さざんかを除く)
豆類(未成熟、ただし、さやいんげん、さやえんどう、未成熟そらまめを除く)
このうち、「ひのき科(採種樹)」は「ひのき(採種樹)」の間違いのようで、現在の FAMIC の農薬登録情報提供システムでは修正されています。ダウンロードデータは間違ったままなので、m_tekiyo を作成する際に例外処理で対応するかどうかは要検討です。
「○○を除く」が追加されている場合については、m_byochu と同様に m_tekiyo から抽出した作物名に、作物概念図から生成した分類コードを関連づける方法で対応可能です。この方法で、作物マスターを作成できるように、スクリプトを修正します。
で作成されるクエリーで m_sakumotsu2 テーブルを作成し、
select * from m_sakumotsu where sakumotsu not in (select sakumotsu from m_sakumotsu2);
で m_sakumotsu と比較すると、次の4作物が m_sakumotsu2 に存在しません。FAMIC の作物マスターが更新されるたびに、作物概念図も更新されているわけではなさそうです。引用:なばな類(なばな、はなっこりー、みずかけなを除く)
ひのき科(採種樹)
樹木類(つつじ類、まさき、さるすべり、さざんかを除く)
豆類(未成熟、ただし、さやいんげん、さやえんどう、未成熟そらまめを除く)
このうち、「ひのき科(採種樹)」は「ひのき(採種樹)」の間違いのようで、現在の FAMIC の農薬登録情報提供システムでは修正されています。ダウンロードデータは間違ったままなので、m_tekiyo を作成する際に例外処理で対応するかどうかは要検討です。
「○○を除く」が追加されている場合については、m_byochu と同様に m_tekiyo から抽出した作物名に、作物概念図から生成した分類コードを関連づける方法で対応可能です。この方法で、作物マスターを作成できるように、スクリプトを修正します。
投票数:5
平均点:4.00
OhYeah!
投稿数: 983
オンライン

FAMIC の作物概念図も旧システムの Javascript も同様ですが、「なばな類(○○を除く)」が「なばな」「みずかけな」「はなっこりー」等の作物名と同じレベル(第4階層)に分類されているのっておかしくないですか?
これって、本来は「非結球あぶらな科茎葉菜類(○○を除く)」と同様に、小分類(第3階層)「なばな類」の下に栽培条件(第5階層)として存在するべきものですよねえ。今まで誰も薬検に指摘しなかったんだろうか?
これって、本来は「非結球あぶらな科茎葉菜類(○○を除く)」と同様に、小分類(第3階層)「なばな類」の下に栽培条件(第5階層)として存在するべきものですよねえ。今まで誰も薬検に指摘しなかったんだろうか?
投票数:7
平均点:7.14
OhYeah!
投稿数: 983
オンライン

引用:「○○を除く」が追加されている場合については、m_byochu と同様に m_tekiyo から抽出した作物名に、作物概念図から生成した分類コードを関連づける方法で対応可能です。この方法で、作物マスターを作成できるように、スクリプトを修正します。この対応と作物選択ダイアログボックス用として、作物概念図から「○○を除く」を除外して spec.csakumotsu テーブルを作成するようにしました。m_sakumotsu は、m_byochu と同様に m_tekiyo から抽出して、作物名で spec.csakumotsu と join します。
ここまでの作業では、「○○を除く」に分類コードが付与されないため、「□□(○○を除く)」の「□□」の部分だけを使って第5階層の栽培条件付き作物名として分類コードを割り当てています。
これにより、「なばな類(○○を除く)」は作物概念図や旧システムの Javascript と異なり、第5階層の作物名として扱われます。
引用:このうち、「ひのき科(採種樹)」は「ひのき(採種樹)」の間違いのようで、現在の FAMIC の農薬登録情報提供システムでは修正されています。このようなミスや新たな作物に対応できるように、spec.csakumotsu の大分類(第1階層)に「不明」を追加しました。最初の方法で分類コードが割り当てられない作物名は、とりあえず m_sakumotsu 上では「不明」分類の第5階層の作物名として扱います。
ミスの場合はデータが修正された段階で、新作物の場合は作物概念図が更新された段階で、自動的に正規の分類コードが割り当てられます。
現在、下記 URL はこのバージョンになっています。m_sakumotsu から idsaku を m_tekiyo に書き戻す処理も追加してあるので、そのままお使いいただいても大丈夫です。
http://macs.o-ya.net/data/m_sakumotsu.php
m_sakumotsu テーブルを直接変更せず、m_sakumotsu2 テーブルを作成するバージョンも残してありますので、内容確認だけならこちらをお使いください。
http://macs.o-ya.net/data/m_sakumotsu2.php
なお、クエリー作成スクリプトは下記にあります。
http://www.o-ya.net/modules/d3downloads/index.php?page=singlefile&cid=5&lid=3
ここまでの作業では、「○○を除く」に分類コードが付与されないため、「□□(○○を除く)」の「□□」の部分だけを使って第5階層の栽培条件付き作物名として分類コードを割り当てています。
これにより、「なばな類(○○を除く)」は作物概念図や旧システムの Javascript と異なり、第5階層の作物名として扱われます。
引用:このうち、「ひのき科(採種樹)」は「ひのき(採種樹)」の間違いのようで、現在の FAMIC の農薬登録情報提供システムでは修正されています。このようなミスや新たな作物に対応できるように、spec.csakumotsu の大分類(第1階層)に「不明」を追加しました。最初の方法で分類コードが割り当てられない作物名は、とりあえず m_sakumotsu 上では「不明」分類の第5階層の作物名として扱います。
ミスの場合はデータが修正された段階で、新作物の場合は作物概念図が更新された段階で、自動的に正規の分類コードが割り当てられます。
現在、下記 URL はこのバージョンになっています。m_sakumotsu から idsaku を m_tekiyo に書き戻す処理も追加してあるので、そのままお使いいただいても大丈夫です。
http://macs.o-ya.net/data/m_sakumotsu.php
m_sakumotsu テーブルを直接変更せず、m_sakumotsu2 テーブルを作成するバージョンも残してありますので、内容確認だけならこちらをお使いください。
http://macs.o-ya.net/data/m_sakumotsu2.php
なお、クエリー作成スクリプトは下記にあります。
http://www.o-ya.net/modules/d3downloads/index.php?page=singlefile&cid=5&lid=3
投票数:7
平均点:5.71
OhYeah!
投稿数: 983
オンライン

spec.csakumotsu に、id1~id5 を統合した cid フィールドと、ふりがなや別名を格納するための betsumei フィールドを追加しました。また、m_sakumotsu は cid, sakumotsu, betsumei の3フィールドのみで構成されます。
別名の入れ方がまだかたまってないので、別名はほんの少しだけ登録してあります。
m_sakumotsu を直接書き換えるクエリー
http://macs.o-ya.net/data/m_sakumotsu.php
評価用の m_sakumotsu2 を作成するクエリー
http://macs.o-ya.net/data/m_sakumotsu2.php
下記のようなクエリーで、指定した作物の上位分類や栽培条件付き作物名を調べることができます。
1. 「デコポン」の上位分類を調べる
2. 「ねぎ」の栽培条件付き作物名を調べる
別名の入れ方がまだかたまってないので、別名はほんの少しだけ登録してあります。
m_sakumotsu を直接書き換えるクエリー
http://macs.o-ya.net/data/m_sakumotsu.php
評価用の m_sakumotsu2 を作成するクエリー
http://macs.o-ya.net/data/m_sakumotsu2.php
下記のようなクエリーで、指定した作物の上位分類や栽培条件付き作物名を調べることができます。
1. 「デコポン」の上位分類を調べる
--/d
drop table if exists tsakumotsu;
create temp table tsakumotsu as select cid from spec.csakumotsu where concat('/', sakumotsu, betsumei) regexp '(^|/)デコポン(/|$)';
select * from spec.csakumotsu where
cid in (select substr(cid, 1, 2) || '00000000' from tsakumotsu) or
cid in (select substr(cid, 1, 4) || '000000' from tsakumotsu) or
cid in (select substr(cid, 1, 5) || '00000' from tsakumotsu) or
cid in (select substr(cid, 1, 8) || '00' from tsakumotsu) or
cid in (select cid from tsakumotsu)
order by cid;
2. 「ねぎ」の栽培条件付き作物名を調べる
select * from spec.csakumotsu
where cid like (select substr(cid, 1, 8)||'%' from spec.csakumotsu where concat('/', sakumotsu, betsumei) regexp '(^|/)ねぎ(/|$)')
order by cid;
投票数:10
平均点:6.00
OhYeah!
投稿数: 983
オンライン

現在のバージョンでは cid はユニーク値になっているので、cid を idsaku に使用しても全く問題ないことに気づきました。ってことで、spec.sakumotsu, m_sakumotsu ともに cid を idsaku に変更し、m_tekiyo の idsaku にもこの値をそのまま書き戻すように修正しました。
>kabe さん
この作物マスターを使用する場合、m_tekiyo の idsaku の型を char[10] に変更してください。
なお、cid が idsaku に変更されたので、上位分類や栽培条件付き作物名を調べるクエリーは、下記のようになります。
1. 「デコポン」の上位分類を調べる
2. 「ねぎ」の栽培条件付き作物名を調べる
>kabe さん
この作物マスターを使用する場合、m_tekiyo の idsaku の型を char[10] に変更してください。
なお、cid が idsaku に変更されたので、上位分類や栽培条件付き作物名を調べるクエリーは、下記のようになります。
1. 「デコポン」の上位分類を調べる
--/d
drop table if exists tsakumotsu;
create temp table tsakumotsu as select idsaku from spec.csakumotsu where concat('/', sakumotsu, betsumei) regexp '(^|/)デコポン(/|$)';
select * from spec.csakumotsu where
idsaku in (select substr(idsaku, 1, 2) || '00000000' from tsakumotsu) or
idsaku in (select substr(idsaku, 1, 4) || '000000' from tsakumotsu) or
idsaku in (select substr(idsaku, 1, 5) || '00000' from tsakumotsu) or
idsaku in (select substr(idsaku, 1, 8) || '00' from tsakumotsu) or
idsaku in (select idsaku from tsakumotsu)
order by idsaku;
2. 「ねぎ」の栽培条件付き作物名を調べる
select * from spec.csakumotsu
where idsaku like (select substr(idsaku, 1, 8)||'%' from spec.csakumotsu where concat('/', sakumotsu, betsumei) regexp '(^|/)ねぎ(/|$)')
order by idsaku;
投票数:6
平均点:6.67
OhYeah!
投稿数: 983
オンライン

spec.csakumotsu には「□□(○○を除く)」が存在せず、m_sakumotsu には「稲・麦・雑穀類」など適用がない上位分類が存在しません。ってことで、これらを全て調べるためのクエリーです。SQLite には FULL OUTER JOIN がないので、ちょっと複雑になります。
「大麦」の上位分類から「除く」を含む栽培条件付き作物名まで全てを検索するクエリー
「大麦」の上位分類から「除く」を含む栽培条件付き作物名まで全てを検索するクエリー
--/d
drop table if exists tSaku1;
drop table if exists tSaku2;
create temp table tSaku1 as select distinct substr(idsaku, 1, 8) as idsaku from spec.csakumotsu where concat('/', sakumotsu, betsumei) regexp '(^|/)大麦(/|$)';
create temp table tSaku2 as select idsaku, sakumotsu, betsumei from spec.csakumotsu where
idsaku == (select substr(idsaku, 1, 2) || '00000000' from tSaku1) or
idsaku == (select substr(idsaku, 1, 4) || '000000' from tSaku1) or
idsaku == (select substr(idsaku, 1, 5) || '00000' from tSaku1);
insert into tSaku2 (idsaku, sakumotsu, betsumei) select * from m_sakumotsu where idsaku like (select idsaku || '%' from tSaku1);
select distinct * from tSaku2 order by idsaku;
投票数:3
平均点:6.67
OhYeah!
投稿数: 983
オンライン

引用:このうち、「ひのき科(採種樹)」は「ひのき(採種樹)」の間違いのようで、現在の FAMIC の農薬登録情報提供システムでは修正されています。今日のデータ更新で修正されているかなと思ったら、相変わらずダウンロードの方は「ひのき科(採種樹)」で農薬登録情報提供システムの方は「ひのき(採種樹)」のまま…。JPP-NET で確認したら、JPP-NET では「ひのき科(採種樹)」になってました。
FAMIC に問い合わせたところ、農薬登録情報提供システムの方が誤りで、「ひのき科(採種樹)」が正しいそうです。
こちらが正しいとなると、困るのは新しい spec.csakumotsu, m_sakumotsu です。別表1にもないので、上位・下位の構造がさっぱり分かりません。とりあえず大分類「不明」のままにしておくしかなさそうです。
それと、今日のデータ更新により、農薬登録情報ダウンロードのトップページか CSV データダウンロードページにメニューがあったはずの作物名の上位・下位概念へのリンクが、どこにも見つからなくなってしまいました。これを更新しない方向だとすると痛いなあ…。
FAMIC に問い合わせたところ、農薬登録情報提供システムの方が誤りで、「ひのき科(採種樹)」が正しいそうです。
こちらが正しいとなると、困るのは新しい spec.csakumotsu, m_sakumotsu です。別表1にもないので、上位・下位の構造がさっぱり分かりません。とりあえず大分類「不明」のままにしておくしかなさそうです。
それと、今日のデータ更新により、農薬登録情報ダウンロードのトップページか CSV データダウンロードページにメニューがあったはずの作物名の上位・下位概念へのリンクが、どこにも見つからなくなってしまいました。これを更新しない方向だとすると痛いなあ…。
投票数:1
平均点:10.00
OhYeah!
投稿数: 983
オンライン

引用:それと、今日のデータ更新により、農薬登録情報ダウンロードのトップページか CSV データダウンロードページにメニューがあったはずの作物名の上位・下位概念へのリンクが、どこにも見つからなくなってしまいました。これを更新しない方向だとすると痛いなあ…。この件も FAMIC に話してあったんですが、概念図が早速更新されてました。「ひのき科(採取樹)」は「ひのき」の栽培条件に分類されてます。
また、Excel, CSV いずれのダウンロードページからも概念図にリンクが張られています。これで一安心。
ただし、「なばな類(○○を除く)」の分類は相変わらずおかしいです。それと、分類付き m_sakumotsu の別名登録をしてて気づいたんですが、別表1にはない「きいちご」が「果樹類 - その他の果樹」に分類されていて、「ラズベリー」は「果樹類 - 落葉果樹 - ベリー類」に分類されています(別表1では「果樹類 - ベリー類」)。「ベリー類」ってのはずいぶんおおざっぱな分類ですが、それはあっちにおいておいて、「きいちご」ってのは本来「ラズベリー」の上位分類じゃないとおかしいですよね。FAMIC の5階層分類なら、「果樹類 - 落葉果樹 - ベリー類 - きいちご - ラズベリー」とするのが正しいような…。
この2点については、また FAMIC に確認しておきます。
また、Excel, CSV いずれのダウンロードページからも概念図にリンクが張られています。これで一安心。
ただし、「なばな類(○○を除く)」の分類は相変わらずおかしいです。それと、分類付き m_sakumotsu の別名登録をしてて気づいたんですが、別表1にはない「きいちご」が「果樹類 - その他の果樹」に分類されていて、「ラズベリー」は「果樹類 - 落葉果樹 - ベリー類」に分類されています(別表1では「果樹類 - ベリー類」)。「ベリー類」ってのはずいぶんおおざっぱな分類ですが、それはあっちにおいておいて、「きいちご」ってのは本来「ラズベリー」の上位分類じゃないとおかしいですよね。FAMIC の5階層分類なら、「果樹類 - 落葉果樹 - ベリー類 - きいちご - ラズベリー」とするのが正しいような…。
この2点については、また FAMIC に確認しておきます。
投票数:2
平均点:5.00
OhYeah!
投稿数: 983
オンライン

引用:別名の入れ方がまだかたまってないので、別名はほんの少しだけ登録してあります。作物タブの検索パターンが '、' で区切られているかどうかを前提としているので、複数の別名がある場合は '、' で区切るのが一番良いという結論に達しました。ってことで、現在下記 URL は別名を '、' で区切って登録するクエリーを生成するようになっています。
なお、「Re: 分類付き m_byochu」で書いたように、m_tekiyo に idsaku, idbyochu を書き戻さないようにした方がよさそうなので、m_sakumotsu.php では m_tekiyo への idsaku 書き戻し処理をコメントアウトしてあります。が、現在の ACFinder では m_sakumotsu テーブルを書き換えた場合は、m_tekiyo テーブルへの idsaku の書き戻しが必須です。最後の行は、
m_sakumostu 直接書き換え版: http://macs.o-ya.net/data/m_sakumotsu.php
m_sakumotsu2 作成版: http://macs.o-ya.net/data/m_sakumotsu2.php
別名は別表1を参考に登録していますが、野菜類は別名が多いのでなかなか進みませんが
。あと、野菜の残りと、ぶどうの「○倍体品種」の具体的な内容を追加すれば終了になります。
ところで、現在 m_byochu は idsaku, sakumotsumei, betumei だけで構成されていますが、m_byochu に id1~id4 も残した方が良いかどうか思案中です(id5 は m_byochu で使うことはないと思うので、残しても id1~id4)。idsaku だけでも事足りるでしょうから、3つだけでもいいですかねえ?
なお、「Re: 分類付き m_byochu」で書いたように、m_tekiyo に idsaku, idbyochu を書き戻さないようにした方がよさそうなので、m_sakumotsu.php では m_tekiyo への idsaku 書き戻し処理をコメントアウトしてあります。が、現在の ACFinder では m_sakumotsu テーブルを書き換えた場合は、m_tekiyo テーブルへの idsaku の書き戻しが必須です。最後の行は、
/*m_tekiyo更新 2010.11.26 */
/*
begin transaction;
update m_tekiyo set idsaku = (select idsaku from m_sakumotsu where sakumotsu = m_tekiyo.sakumotsu);
commit;
*/
から/*m_tekiyo更新 2010.11.26 */
begin transaction;
update m_tekiyo set idsaku = (select idsaku from m_sakumotsu where sakumotsu = m_tekiyo.sakumotsu);
commit;
に変更してお使いください。m_sakumostu 直接書き換え版: http://macs.o-ya.net/data/m_sakumotsu.php
m_sakumotsu2 作成版: http://macs.o-ya.net/data/m_sakumotsu2.php
別名は別表1を参考に登録していますが、野菜類は別名が多いのでなかなか進みませんが

ところで、現在 m_byochu は idsaku, sakumotsumei, betumei だけで構成されていますが、m_byochu に id1~id4 も残した方が良いかどうか思案中です(id5 は m_byochu で使うことはないと思うので、残しても id1~id4)。idsaku だけでも事足りるでしょうから、3つだけでもいいですかねえ?
投票数:3
平均点:6.67
OhYeah!
投稿数: 983
オンライン

m_sakumotsu の作成方法とインデックスの作り方によって、m_tekiyo への idsaku の書き戻し時間が結構変わることに気づきました。なんとか我慢できる時間で書き戻せるようになったので、とりあえず m_tekiyo への idsaku 書き戻しを復活しました。id1~1d5 はどう考えても不要なので、m_sakumotsu のフィールドは idsaku, sakumotsu, betsumei の3つで確定します。
下記 URL で表示されるクエリを「全て選択」 → 「コピー」 → ACFinder の SQL タブに「貼り付け」 → ACFinder の SQL タブで「実行」という手順で、新しい m_sakumotsu が使えます。ACFinder 本体が、まだ新しい m_sakumotsu 生成クエリーを使用するようになっていないので、今のところデータ更新の度にこの操作を行う必要があります。
http://macs.o-ya.net/data/m_sakumotsu.php
あとは、別表1の別名を全部登録すれば、新 m_sakumotsu は完了です。
>kabe さん
作物タブの検索は、下記のように修正してください。
下記 URL で表示されるクエリを「全て選択」 → 「コピー」 → ACFinder の SQL タブに「貼り付け」 → ACFinder の SQL タブで「実行」という手順で、新しい m_sakumotsu が使えます。ACFinder 本体が、まだ新しい m_sakumotsu 生成クエリーを使用するようになっていないので、今のところデータ更新の度にこの操作を行う必要があります。
http://macs.o-ya.net/data/m_sakumotsu.php
あとは、別表1の別名を全部登録すれば、新 m_sakumotsu は完了です。
>kabe さん
作物タブの検索は、下記のように修正してください。
CREATE TEMP TABLE ttTekiyoSaku AS SELECT * FROM tekiyo WHERE idsaku IN(SELECT idsaku FROM m_sakumotsu WHERE concat('、', sakumotsu, betsumei) REGEXP '(^|、|\()(作物名).*?(\)|、|$)' AND concat('、', sakumotsu, betsumei) NOT REGEXP '\((.*、)?(作物名)(、.*)?を除く');
できれば、下記のように修正すればベストです。CREATE TEMP TABLE ttTekiyoSaku AS SELECT * FROM tekiyo WHERE sakumotsu IN(SELECT sakumotsu FROM m_sakumotsu WHERE concat('、', sakumotsu, betsumei) REGEXP '(^|、|\()(作物名).*?(\)|、|$)' AND concat('、', sakumotsu, betsumei) NOT REGEXP '\((.*、)?(作物名)(、.*)?を除く');
投票数:2
平均点:10.00
OhYeah!
投稿数: 983
オンライン

引用:別表1にはない「きいちご」が「果樹類 - その他の果樹」に分類されていて、「ラズベリー」は「果樹類 - 落葉果樹 - ベリー類」に分類されています(別表1では「果樹類 - ベリー類」)。FAMIC に確認したところ、別表1に記載がない作物については、とりあえず「その他」に分類しているとのことでした。他にも似たような事例があると思いますが、別表1を含めて検討していくそうです。
「なばな類(○○を除く)」については、直接の担当の方ではなかったので、単なるミスなのか、何らかの意図があってなばな類だけ階層が異なるのかは不明です。
「なばな類(○○を除く)」については、直接の担当の方ではなかったので、単なるミスなのか、何らかの意図があってなばな類だけ階層が異なるのかは不明です。
投票数:5
平均点:6.00
sugak
投稿数: 2

お世話になっております。菅原です。
以前にこちらの談話室で作物名コードの件を投稿して以来、
いろいろと対応いただきましてありがとうございました。
ACFinderのtest版は、さっそく利用させていただいています。
引き続き、よろしくお願いします。
以前にこちらの談話室で作物名コードの件を投稿して以来、
いろいろと対応いただきましてありがとうございました。
ACFinderのtest版は、さっそく利用させていただいています。
引き続き、よろしくお願いします。
投票数:5
平均点:4.00
OhYeah!
投稿数: 983
オンライン

kabe さんが現在多忙なため、新しい m_sakumotsu, m_byochu に対応した ACFinder の公開はちょっと先になるかもしれません。
20101031 TEST 版では、idsaku, byochu が単純連番になっているため、一部の機能が正常に使えなかったりしますが、新しい ACFinder では、従来通りの使い勝手になると思います。
20101031 TEST 版では、idsaku, byochu が単純連番になっているため、一部の機能が正常に使えなかったりしますが、新しい ACFinder では、従来通りの使い勝手になると思います。
投票数:1
平均点:10.00
OhYeah!
投稿数: 983
オンライン

従来の m_sakumotsu に、level フィールドが存在したのを思い出しました。ってことで、m_sakumotsu は level, idsaku, sakumotsu, betsumei の4フィールド構成に変更しました。
http://macs.o-ya.net/data/m_sakumotsu.php
http://macs.o-ya.net/data/m_sakumotsu.php
投票数:2
平均点:5.00
OhYeah!
投稿数: 983
オンライン

現在対象作物として登録がある作物については、別表1の別名が登録完了しました。別表1に記載があっても登録農薬がない作物は、登録していないものが結構あるので、これはまた今後アップデートしていきます。
なお、別名については、漢字名を登録しているときりがないので、かな名のみとしました。また、ブドウの「○倍体品種」も多すぎるので別名として登録するのはやめました。これらについては、従来通り入力時の辞書による変換で対応することとします。
あと、作物概念図から作成する spec.csakumotsu、m_tekiyo テーブルから抽出する m_sakumotsu テーブルのほか、作物選択ダイアログボックス用に sakumotsu テーブルを追加しました。
spec.csakumotsu には登録農薬が存在しない作物名があるため、spec.csakumotsu を作物選択ダイアログボックスに使用すると、薬剤がない作物名まで表示してしまいます。かといって、m_sakumotsu には上位分類に登録農薬が存在しない場合、その上位分類の作物名もないため、作物選択ダイアログボックスで分類からの選択ができません。
そこで、下位分類に登録農薬がある場合は、その上位分類も含めて作物選択ダイアログボックスに必要な情報を網羅した sakumotsu テーブルを別途用意したというわけです。作物選択時には本来不要な「○○を除く」は削除してあります。
http://macs.o-ya.net/data/m_sakumotsu.php
なお、別名については、漢字名を登録しているときりがないので、かな名のみとしました。また、ブドウの「○倍体品種」も多すぎるので別名として登録するのはやめました。これらについては、従来通り入力時の辞書による変換で対応することとします。
あと、作物概念図から作成する spec.csakumotsu、m_tekiyo テーブルから抽出する m_sakumotsu テーブルのほか、作物選択ダイアログボックス用に sakumotsu テーブルを追加しました。
spec.csakumotsu には登録農薬が存在しない作物名があるため、spec.csakumotsu を作物選択ダイアログボックスに使用すると、薬剤がない作物名まで表示してしまいます。かといって、m_sakumotsu には上位分類に登録農薬が存在しない場合、その上位分類の作物名もないため、作物選択ダイアログボックスで分類からの選択ができません。
そこで、下位分類に登録農薬がある場合は、その上位分類も含めて作物選択ダイアログボックスに必要な情報を網羅した sakumotsu テーブルを別途用意したというわけです。作物選択時には本来不要な「○○を除く」は削除してあります。
http://macs.o-ya.net/data/m_sakumotsu.php
投票数:2
平均点:5.00
OhYeah!
投稿数: 983
オンライン

書き忘れてましたが、別名で「○○しろな」とか「○○かぶ」といった作物名の頭に地名等が含まれるものは、単純に「しろな」「かぶ」で検索すればすむことなので、spec.csakumotsu や m_sakumotsu, sakumotsu には登録していません。
>kabe さん
作物選択ダイアログボックス用の sakumotsu テーブルは、検索に使わないなら betsumei フィールドは不要ですね。削除しちゃってもいいでしょうか?
>kabe さん
作物選択ダイアログボックス用の sakumotsu テーブルは、検索に使わないなら betsumei フィールドは不要ですね。削除しちゃってもいいでしょうか?
投票数:3
平均点:3.33
OhYeah!
投稿数: 983
オンライン

携帯農薬検索で使いやすいように、「○○(露地栽培)」「○○(施設栽培)」「○○(水耕栽培)」は、別名にそれぞれ「ろじ○○」「しせつ○○」「すいこう○○」を追加しました。
http://macs.o-ya.net/data/m_sakumotsu.php
http://macs.o-ya.net/data/m_sakumotsu.php
投票数:2
平均点:5.00
OhYeah!
投稿数: 983
オンライン

ようやく、このバージョンの PHP スクリプトを下記に公開しました。興味のある人は、ご覧ください。
http://www.o-ya.net/modules/d3downloads/index.php?page=singlefile&cid=5&lid=3
http://www.o-ya.net/modules/d3downloads/index.php?page=singlefile&cid=5&lid=3
投票数:5
平均点:6.00