![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
phpからMYSQL5に接続して以下のようなデータベースを作りました。
no name comment ←カラム名
1 山田 起きる
2 山田 叫ぶ
3 山田 寝る
これを上書きして、
no name comment
1 山田 食べる
2 山田 遊ぶ
3 山田 寝る
というようにレコードを更新したいのです。
しかし、どうやっても1、2、3の後に4、5、6と続いてしまいます。
「no」カラムにはauto_increment+primary keyを設定しています。
phpで構文を送る前に
mysql_query("alter table db1 auto_increment=0");
を設定してみたり、
mysql_query("insert into db1 (name,comment) value ('山田','$comment')");
や
mysql_query("replace into db1 (name,comment) value ('山田','$comment')");
を試してみましたが、上手く行きませんでした。
現在は、
mysql_query("delete from db1");
mysql_query("alter table db1 auto_increment=0");
---php処理---
mysql_query("insert into db1 (name,comment) value ('山田','$comment')");
というように、二度目の書き込みを行う前に一旦テーブル内のレコードを
すべて削除して書きなおすという方法を取っています。
しかし、数が多くなると一旦削除する作業を行うと処理が遅くなってしまうと思いますので、上書きしてデータベースを更新したいと思っているのですが、どのようにすればよいでしょうか?
No.2ベストアンサー
- 回答日時:
replace into db1(no,name,comment)
values
(1,"山田","食べる")
,(2,"山田","遊ぶ")
,(3,"山田","寝る")
でいいのでは?
replaceはユニークなフィールド情報を元にデータがあれば書き換え、
なければ追加する仕様なのだからここではprimaryなフィールドを
指定しないとデータが追加されるのは普通です
この回答への補足
ありがとうございます。
実際に使う場合はレコードの数も多くなりますので、primaryなフィールド(no)は自動で挿入させたいのですが、それはphp側の処理で
mysql_query("replace into db1 (no,name,comment) value ($i,'山田','$comment')");
というように記述するしかないのでしょうか?
SQL文で1から自動的に値を代入させていく方法はありますか?
No.3
- 回答日時:
こんにちは
よくわからないんですが、上書きしたいという事は、上書きする対象のレコードが判断できるんですよね???
ご質問の例ですと、
1.起きる → 食べる
2.叫ぶ → 遊ぶ
普通にUPDATEでいいんじゃないんですか?
わざわざREPLACEしている意味がわからないのですが・・・。
件数が多い場合というのがピンときません。
どのレコードのcommentカラムを書きかえるのかは、noカラムで指定しない限り判断できませんよね?
新規追加ならauto_incrementに意味がありますが、書き換える場合は対象レコードを判断できないと駄目なのはわかりますよね?
DELETE → INSERTの場合は、元のデータのnoが置き換わってしまうわけですから、全く別のデータになっています。
他のテーブルでnoを参照している場合は、データ連携がぐちゃぐちゃですが・・・?
No.1
- 回答日時:
>レコードを更新したいので
普通に考えると UPDATE を使うのですが・・・何故 replace ?
この回答への補足
ありがとうございます。
UPDATEも試したのですが、UPDATEの場合一度にすべての項目を書き換える時に使うことが多い関数であると解釈しました。
no name comment
1 山田 起きる
2 山田 叫ぶ
3 山田 寝る
これをUPdateを使った場合、
no name comment
1 山田 食べる
2 山田 食べる
3 山田 食べる
や
1 鈴木 起きる
2 鈴木 叫ぶ
3 鈴木 寝る
というように書き変えたい場合UPDATEを使うと良いと本に書いていたのですが、レコードごとにcommentを変えて一気に書き換えることはできるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL テーブル作成です。どこかのスペルが間違っているか記号など スペースかな? 1 2022/10/01 05:08
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- MySQL あと、MySQLの文字コードはutf8 気になりますね 1 2022/12/01 07:22
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- MySQL 共通点はあります。何が違うのでしょうか? 1 2023/01/27 05:22
- PHP プログラムコードを入力する場合改行してもいいですか? 2 2022/10/02 16:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLを作ったのですがうまくいき...
-
SQLです教えてくださいお願いし...
-
SQL教えてください。
-
(初心者)MySQLやmaraDBで、crea...
-
SQLです教えてくださいお願いし...
-
SQLです教えてください。
-
SQLです。こんな感じですか?あ...
-
次の時間帯の勝率の合計を求め...
-
エラー 1068 (42000): 複数の主...
-
SQLです教えてくださいお願いし...
-
htmlコードで書かれた表にphpで...
-
SQLでカラムを追加し、条件に合...
-
int(11)の(11)とは何を意味して...
-
SQLです下記の問合せを行うクエ...
-
#1062 - '0' は索引 'PRIMARY' ...
-
【初歩】ラジオボタンをつかっ...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
utf8bomとutf8mb4の違いがいま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルの列数を調べたい
-
group byで最後のレコードを抽...
-
MYSQLで小数点を表示する場合と...
-
[MySQL]LOAD DATA INFILE一部レ...
-
select * での表示が崩れる?
-
フレンドリストのようなものを...
-
WHEREなどの条件が多い場合、ど...
-
MySQL AUTO_INCREMENTが最大に...
-
時間範囲が重複したレコードを...
-
「VARCHAR(255)」を「text」に...
-
MySQL テーブルの一部のカラム...
-
データの暗号化について
-
列視点ではなく、行視点での検...
-
MySQLで、指定の複数カラムのみ...
-
このクエリを教えてください
-
MySQL 改行コードを含む文字列...
-
whereの使い方が分からないので...
-
MYSQLのレコードを上書きしたい...
-
誤って削除したIDカラムを復元...
-
SQLの範囲指定検索の質問です。
おすすめ情報