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ランキング
-
MYSQLで小数点を表示する場合と...
-
テーブルの列数を調べたい
-
select * での表示が崩れる?
-
group byで最後のレコードを抽...
-
一部のカラムでdistinctし全て...
-
SQLServerでNULLを挿入したいです
-
INDIRECT関数の代替方法は?
-
頭に0が付く文字
-
ドロップダウンリストの連動し...
-
エクセルかワードで家系図を作...
-
日付を一括UPDATE
-
SELECT文で、指定カラム以外の...
-
インデックスを削除したいので...
-
sql , insert で空行(全ての列...
-
連番を振る インデックス 付...
-
JDBCドライバがない?
-
複数カラムに対するLIKE文の最適化
-
カラム上の重複を削除するクエ...
-
(phpMyadminの)インデックスサ...
-
SQL文に間違いがありますでしょ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テーブルの列数を調べたい
-
group byで最後のレコードを抽...
-
MYSQLで小数点を表示する場合と...
-
[MySQL]LOAD DATA INFILE一部レ...
-
フレンドリストのようなものを...
-
WHEREなどの条件が多い場合、ど...
-
MYSQLのストアドでの動的SQLに...
-
select * での表示が崩れる?
-
MySQL AUTO_INCREMENTが最大に...
-
MySQL 改行コードを含む文字列...
-
「VARCHAR(255)」を「text」に...
-
MySQL テーブルの一部のカラム...
-
betweenを使うyyyy/mm/ddでの範...
-
MySQLのselect文で、最大ID値の...
-
ここで「INSERT INTO」を使う意...
-
データの暗号化について
-
時間範囲が重複したレコードを...
-
MYSQLのレコードを上書きしたい...
-
誤って削除したIDカラムを復元...
-
INDIRECT関数の代替方法は?
おすすめ情報