dポイントプレゼントキャンペーン実施中!

関連する本を買い込みましたが、全然情報がないのでご助言下さい!

複数テーブルから文字列を抽出して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」としました。

何が足りないのか誤ってるのか・・・ご教授いただければ幸いです。

A 回答 (2件)

「入力」という用語を、どういう意味で使っているのでしょうか?



table1のcol1の値から、table2のcol3と対応付けcol4を求め、さらにid1を生成するなら、table1に予め行をinsertしておき、その後、updateすることになります。この場合、同一表に対してselectし、updateするには1SQLで行うにはMySQLの仕様上の制限を受けるかも知れません。

それとも、table1に格納する値を変数に持ち、table2を検索後に格納するのでしょうか?

id1を生成するSQL例を、以下に示します。これをinsert~selectすれば、期待した値をtable1に格納できると思います。

set @num=0;
set @col1='A';

select
null,
concat('K',
col4,
date_format(current_date,'%y'),
date_format(current_date,'%m'),
'-',
lpad(cast(@num:=@num+1 as char(4)),4,'0')),
@col1,
3323
from table2
where col3=@col1

この回答への補足

ご回答ありがとうございます!

どうも説明が悪いようで申し訳ありません。

col1とcol2を入力 (insert) するのと同時にID1を生成し、入力 (insert) と考えておりましたが、一度 col1, col2 に insert してからその後 table2 を参照しつつ update ということになるのでしょうかね、やはり。

このようにも↓書いてみましたが・・・やっぱりダメでした。
いけそうな気もしたのですが・・・。

$y = date("y",time());
$m = date("m",time());
$sql = "select col4 from table1 INNER JOIN table2
ON col1.table1 = col3.table2
where '$col1' = col3"; 

//↑この時点ではまだ col1 の値がないからダメってことですかね?

$result = mysql_query($sql);
$rows = mysql_num_rows($result);

while($row = mysql_fetch_array($result)){

$renban = $row["col4"];
$ID1 = "K$renban$y$m-0000";

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

}

ちなみに、下4桁の連番は、月が変わった時点でリセット(1に戻る)ようにしたいのですが、そういったことも可能なのでしょうか?

例:
KW0807-0235 (7月31日)
KW0808-0001 (8月1日)

補足日時:2008/07/27 02:29
    • good
    • 0

別テーブルをつかったデータの更新はMySQLのバージョンによって


やり方がことなります。
バージョンの提示が必要です。

この回答への補足

rpm -q mysql の結果は mysql-5.0.45-7.el5 でした。
ちなみに rpm -q php は php-5.1.6-20.el5_2.1 です!

補足日時:2008/07/22 15:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す