人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

mysqlに関する質問です。いくつかのフィールドを持ったTABALEを運用していますが、今簡単に
uniquekey data
とします。uniquekeyはauto_incrementです。

例えば
1 data1
2 data2
という風に増えます。

今、
3 data3
を入力し、間違えたのでDELETE FROM TABLE1 WHERE data = 'data3'をしてうまくいったとします。

ところが、次に生成するdataが、
4 data3
となってしまうのです。

理由は、
SELECT uniquekey FROM TABLE1 ORDER BY uniquekey DESC LIMIT 1
として、$data = 'data' . (item['uniquekey'] + 1);のようにしているからです。

これを解消して、data3を削除した後でもちゃんとincrementしたuniquekeyに自動でdataの名称をあわせる方法はありますか?(一度書き込んでからupdateするという手段もありますが・・・)

●質問者: ReoReo7
●カテゴリ:インターネット ウェブ制作
✍キーワード:DELETE MySQL SELECT いるか フィールド
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● taroe
●35ポイント

uniquekeyだけを別テーブルにもって番号だけ生成させて

こちらのほうは、その番号とdata番号を挿入する形にとる



または、

http://d.hatena.ne.jp/spiritloose/20080327/1206580321

MYSQLのトリガーをつかって、ORACLEのシーケンスのようなものを作成して利用してもよいと思います。

◎質問者からの返答

なるほど、別テーブルについては何となく分りました。

betsu_uniquekey status

で、statusが何も無ければ通常どおりinsert、statusにdeleteとか入れてたらもう一度その番号を返すみたいな感じでしょうか。

「MYSQLのトリガーをつかって、ORACLEのシーケンスのようなものを作成」<すみません、理解を超えてしまいましたので1個目の解決策しか分りませんでした。


2 ● deflation
●35ポイント ベストアンサー

質問文からPHPも併用しているものと思われますが、MySQLとPHPのバージョンが分からないので、ここではMySQLバージョン5.5とPHP5.3をご利用になっているものとして回答します。

下記スクリプトを実行してみてください。エラー処理はしていません。


$con = mysql_connect(ホスト名, ユーザー名, パスワード);
mysql_select_db(データベース名, $con);
$sql = "SHOW TABLE STATUS LIKE TABLE;";
$res = mysql_query($sql, $con);
$row = mysql_fetch_array($res);
$next_uq = $row['Auto_increment']; //次のAutoIncrement値

$data = 'data' . $next_uq;
$sql = "INSERT INTO TABLE (uniquekey, data) VALUES (NULL, '{$data}');";
$res = mysql_query($sql, $con);
mysql_close($con);
◎質問者からの返答

ありがとうございます。

こんな方法もあったのですね・・・知りませんでした。

ありがとうございます。

auto_increment無しでいこうと思います。

一度体系的に学ぶ必要があると感じつつも、常に作りたいものありきで考えているので、こうした際に質問が多くなり申し訳ありませんが、助かっています。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ