日本PHPユーザ会 掲示板

日本PHPユーザ会運営の掲示板です。※ただいまテスト運用中です。

日本PHPユーザ会 掲示板 » PHP事はじめ » PHP + MySQL で自動連番

PHP + MySQL で自動連番

ページ: 1

投稿者 投稿
会員
登録者: 7 2008
返信数: 2
関連する本を買い込みましたが、全然情報がないのでご助言下さい!

複数テーブルから文字列を抽出してIDを振るような入力フォームを作っています。
具体的には以下のような形を考えているのですが、どのように記述をしてよいのかさっぱりです・・・。

table1:
+-----+-------------+------+------+--
| ID0 | ID1 | col1 | col2 |
+-----+-------------+------+------+--
| 1 | KW0807-0001 | A | 3323 |
| 2 | KX0807-0002 | B | 1122 |
| 3 | KY0807-0003 | C | 4441 |
| 4 | KW0807-0004 | A | 1256 |
+-------------------+------+------+--

table2:
+-----+------+------+--
| ID2 | col3 | col4 |
+-----+------+------+--
| 1 | A | W |
| 2 | B | X |
| 3 | C | Y |
| 4 | D | Z |
+-----+------+------+--

・ID0 は AUTO INCREMENT
・ID1 -> [K(規定値)] + [col1で入力する値よりcol4を抽出] + 入力した年 (08) + 入力した月 (07) + 0001 から始まる4桁の連番
・col1, col2の入力と同時に、ID1 を自動で生成、入力 (table2は既存です)

ひとまずこんな感じかな・・・と書いてみましたが、全然ダメです。
ID1の入力値は「KResource id #30807-」となってしまいました。

$y = date("y",time());
$m = date("m",time());

$renban = mysql_query("
select col4 from table1 INNER JOIN table2 //LEFT JOINでも可?
ON col1.table1 = col3.table2
where '$col1' = col3
");

$ID1 = "K$renban$y$m-0000";

$sql = "insert into table1 values('$ID1', '$col1' '$col2');

※4桁の連番もどうしてよいか分からないので、ひとまず「0000」としました。

何が足りないのか誤ってるのか・・・ご教授いただければ幸いです。
会員
登録者: 10 2007
返信数: 71
とりあえず私の知っている所だけですが・・・。

まず、mysql_query()関数の返り値ですが、これはSQLの実行結果そのものが返ってくるわけではありません。一旦、「結果リソース」というものになって返されてきますので、これをお好みのmysql_fetch_???関数などで実際の結果を取得していきます。

この例の場合だと、次のようにして実際の結果を取得することが出来ると思います。
$renban_result = mysql_query( /*...中略...*/ );
list($renban) = mysql_fetch_row($renban_result);
このmysql_fetch_row()の関数の詳細については書籍やPHPマニュアルに載っていると思いますので調べてみて下さい。他にも
mysql_fetch_array()
mysql_fetch_assoc()
mysql_fetch_field()
mysql_fetch_lengths()
mysql_fetch_object()
が、あります。
会員
登録者: 10 2007
返信数: 71
今更かもしれませんが、念のため書いておきます。

MySQL5で、1度のSQL発行で入力処理を行うには次のSQL文でできました。
ただし、ID1の「-0001」の部分はID0と同じものとします。
set @col1 = 'C';
set @col2 = 4441;
INSERT INTO table1 (ID1,col1,col2) VALUES (CONCAT('K',(SELECT col4 FROM table2 WHERE col3=@col1),DATE_FORMAT(NOW(),'%y%m'),'-',LPAD(CAST(LAST_INSERT_ID()+1 AS CHAR),4,'0')), @col1, @col2);

PHPで処理するにはset文や@変数の代わりに、SQL文を生成する時点でデータを埋め込むこともできます。

ページ: 1

日本PHPユーザ会 掲示板 » PHP事はじめ » PHP + MySQL で自動連番

日本PHPユーザ会 掲示板 は UseBB 1 フォーラムソフトウェア を使用しています