Q:PHP5でPDOを使って MYSQLの5.1.30または、5.4.0を使用しているのですが 以下のようなSQLがあり、COLUMB = B の部分で Bの値が変動して、10万回実行するようなSQLがあります。 UPDATE TESTA SET DEL=1 WHERE COLUMA = A AND COLUMB = B これを、TESTAが動的に34回変動してその中で毎回、10万回実行するのは 結構なSQL発行回数になるので、COLUMB IN (B,B1,B2・・・・)みたいな 感じで、SQLの実行回数は、34回にして、Bの値をINで渡したいと 思うのですが、INの値に、10万個を渡すのは可能でしょうか? それを行った場合に、最初の、UPDATE文を10万回するのと、 INにして、一回のSQLにした場合に、処理の負荷や、処理時間などは改善されますか? ほかに、こういう方がいいのではとかあれば教えて欲しいです。 それと、このSQL文が結構長いと思うのですが、SQL文の長さに関しても上限って あるんですかね? 自分の見解としては、TEXTフィールド複数もったテーブル構造が 可能なので、特に、SQL文の長さに対しての上限はないと思うのですが。 SQL文が何バイト越えたら、レプリケーション出来ないとかあるのでしょうか? わかる方がいたら、教えて欲しいです。 A:回答
Q:MySQLの副問い合わせについて教えてください。 以下のサイトを見て、 「サブクエリの中で更新するテーブルを指定できない」ということを知りました。 実行したいSQLは以下です。できれば1回のSQLで済ませたいです。(一度最小値を取得してから、更新SQLを投げる。というのは避けたいです) 1回のSQLではできないのでしょうか?アドバイスお願いします。 MySQLは初心者ですので、MySQLではこのような副問い合わせはしない。という常識があるのであれば、 それを教えてください。(それなら納得して、2回投げます) 【エラーになったSQL】 update person set status=1, mail_address='hoge@hoge.com' where id = ( select min(id) from person where mail_address is null) ---以下補足 【MySQLのバージョン】 MySQL 5.1(副問い合わせするために、わざわざバージョンアップしたのに!!) 【テーブル名】 person 【カラム】 id status mail_address 【参考URL】 http://dev.mysql.com/doc/refman/4.1/ja/subquery-errors.html http://futuremix.org/2007/08/mysql-update-with-subqueryA:回答
Q:SQL文についての質問です。 表が二つあります。 ★table1 no data 1 100 2 300 ★table2 no data 1 123 200 UPDATE文を使用して テーブル1と同じno数字がテーブル2にあった場合、テーブル2のdataの所に同じno数字のdataを持ってくるにはどのような命令文が必要でしょうか。 今回はno の値が 1 である場合を回答いただければと考えております。 お手数をおかけしますがよろしくお願いいたします。 ※SQLはphp My admin を使用しております。 A:回答
Q:SQLについて教えてください。AccessなのでAccess関数、VBA関数は利用できます。FR変数にはリンゴ、みかん、キ'ウイ の値がはいってきます。変数FRに値をForループでセットしていきます。 For i=1 To 3 str = "update Table1 set Fruit='" & FR & "'" Next FR=リンゴ、みかんは問題なく動きます。キ'ウイは間に"'"が入っているのでご認識が起きます。このご認識を起こらないようにしたいです。何か良いアイディアはあるでしょうか?例えばキ'ウイの"'"を削除するとか、その他の方法がありましたらお教えください。直接手で"'"を削除するというのは無しでお願いします。ループでまわっているので、"'"が含まれていないデータがほとんどなのですが、たまに登場して困っています。A:回答
Q:SQLでupdateをおこないたいと思っています。update TABLE Set 列1='値',列2='値'.....というのはわかるのですが、列の数が100も200もある場合、列1='値'と書いていくには時間がかかります。ちなみに全ての行の値を一括でアップデートしたいです。 ちなみにExcelの列とアクセスのテーブルのフィールド名は全く一緒です。 やりたいことは、 1.VBAでExcelの1行を読み取る。 Excelの列にIDがある。 アクセスのテーブルにもID列がある。 Excelで読み取ったIDがアクセス側にあれば、アップデートをかける。 IDがなければインサートを行う。 2.Excelの列とAccessのテーブルの列は同じフィールド名。 3.Excelで1行読み取ったら次の行へ。繰り返し。 ということをしたいです。次の行へはループでまわせばいいので理解できます。ただ、列数が100以上もあるので上のように列=値と1つ1つやっていると大変です。何かよい手はないでしょうか? A:回答
Q:MySQL 5.1.30を使用して、 phpMyAdminのバージョン3.0.1-rc1を使用しているのです、 一行だけ変更すると以下のWarningが出ます。 1 行変更しました。 Warning: #1592 Statement is not safe to log in statement format. このWarningを出ないようにするには、実行するSQLの後ろにLIMIT 1 とかが付いているため 出るのですが、UPDATEする際にこのLIMITを付与しないように するにはどうしたらいいでしょうか? A:回答
Q:SQL(ORACLE)について 下記に、商品テーブルと時間テーブルという2つのテーブルがあります。 商品テーブルをもとに、ファイルを作成しているのですが、 件数が膨大なため差分更新を行いたいと思います。 前回実行した時間を時間テーブルに格納し、 その時間以降に更新された商品テーブルのデータだけを抽出したいのですが、 どのように記述すればいいのか教えてください。 商品テーブルの情報が変更された場合には、UPDATEの日時が更新されます。 --------------------------------- 商品テーブル JAN,NAME,ZAIKO,UPDATE 12,SDカード,3,200809231612 15,MDカード,5,200808080820 時間テーブル タスク,前回実行時間 UPDATEPRODUCT,200809221600 --------------------------------- 例のテーブルでは、 前回の実行時間の2008/09/22 16時00分以降の 2008/09/23 16時12分に更新された商品テーブルの1行目を 抽出したいと思っています。 12,SDカード,3,200809231612 A:回答
Q:MySQLでデータ更新が失敗 PHPを使ってMySQLでデータ更新する時に、下記の【成功】と同じ事を【失敗】で行うとこのSQL文の文法にエラーが発生します。【失敗】はforeachで配列のデータを使っています。間違っている部分を指摘してください。 【成功】 $sql = 'UPDATE data SET url = "http://www.hoge.com/aaa" WHERE id = 123'; 【失敗】 $sql = 'UPDATE data SET url = $value['url'] WHERE id = $value['id']'; Linux、Windows PHP 5.2.5 MySQL 5.1.22-rc A:回答