• ベストアンサー

INSERT,DELETEを同時に

$sql = "INSERT INTO daykg(id,name,day,kg)select distinct id,name,'$day','-1'from daykg"; $sql = "DELETE FROM daykg WHERE distinct ORDER BY day DESC LIMIT 5,1"; 上で会員全員にインサート、下で会員全員の五行目から一行削除としているつもりですが、合ってますか??

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

>$sql = "DELETE FROM daykg WHERE distinct ORDER BY day DESC LIMIT 5,1"; これは無茶苦茶すぎて改良のしようがないね いろいろやり方は考えられますが、SQLを分けるのが一番簡単かな $sql = "SELECT @day:=day FROM daykg ORDER BY day DESC LIMIT 4,1"; $sql = "DELETE FROM daykg WHERE day=@day"; ポイント: LIMIT x,yはx個とばしてy個なので、5行目をつかむなら4,1じゃない? サブクエリはLIMITをサポートしていないのでこの場合一つのSQLにはならない ランク処理をすればSQLをまとめられますが、逆にコードはかなり煩雑になります。 また、x行目から2個(複数個)とるときは変数への代入ができないため テンポラリテーブルを作成することになります

drmada
質問者

お礼

ありがとう御座います!解決しました!

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

会員全員にinsertなんてしなくても「空いた日付の部分」をphpで上手く処理すればいいだけ・・って何度言っても無視されるのは何故だろう。以前サンプルコードも提示したハズなんだけど。 #まぁ「それが必要な仕様」だと言い張ってたけどね。 で、deleteのwhere条件はdayだけでいいだろう。deleteにdistinctとかわけがわからん。 そもそも仕様を決めるときに「どういうSQL文に落とし込めばできるか」って考慮していないのが決定的にアウトだよ。作り始めてから仕様の不備が見つかるなんて愚の骨頂だからね。お馬鹿SEの典型。必要なSQL文のイメージができないレベルで設計なんかできるわけがない。 相互リンク(直近のものだけ) http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1277028592 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1377026028

関連するQ&A

  • INSERT INTOに関しまして。

    $sql = "INSERT INTO テーブル名(name,day,kg)VALUES('','$day','-1')"; 現在このようなSQL文でINSERTしていますが、データベース内にあるカラムname全てに対してINSERTするにはどうすれば良いでしょうか??現在のSQL文ではそれができず、nameが空欄の状態で更新されてしまいます。

    • ベストアンサー
    • PHP
  • 既存データをINSERT文にして出力するツールは?

    Oracleデータベース内のデータを取り出して、SQL(INSERT文)として出力できるツールは無いでしょうか。 例えば TABLE_A というテーブル内に次のようなレコードが入っているものとして、下記のようなINSERT文を生成してくれるフリーの(もしくは安価な)ツールは無いでしょうか。 MY_ID MY_NAME MY_DESC ----- ------- ------- 00001 hoge1 説明1 00002 hoge2 説明2 insert into TABLE_A (MY_ID, MY_NAME, MY_DESC) values ('00001', 'hoge1', '説明1'); insert into TABLE_A (MY_ID, MY_NAME, MY_DESC) values ('00002', 'hoge2', '説明2'); CSV形式で出力するようなツールは見つけたのですが、INSERT文にしてくれるツールがなかなか見つかりませんでした。 「PL/SQL Developer」というものを見つけたので試してみたところ、これはまさにうってつけのツールだったのですが、それなりのお値段(25,000円ほど?)でした。 このような本格的なツールでなくて良いので、フリーソフト(もしくは安価な)で無いでしょうか。 ちなみに Oracle のバージョンは Oracle 10g です。

  • CakePHPとMySqlを使用しています。INSERTしたあと、id

    CakePHPとMySqlを使用しています。INSERTしたあと、idを取得する方法について教えて頂きたいです。 データをINSERTとSELECTをする関数を作成し、 メインの関数でINSERTとSELECTをする関数を呼び出すと、idがNULLとなってしまいます。 しかし、1つの関数でINSERTとSELECTを行うとidを取得する事ができました。 この方法は問題ないのでしょうか? この方法だとなぜidが取得できるんでしょうか? また、これ以外の方法でidを取得できる方法があればお教え頂きたいです。 宜しくお願いします。 【hogeテーブル】 id(PRIMARY。オートインクリメントさせています) name ●idがNULLになる方法 function main() { $this->insertHoge(); $id = $this->getHoge(); ←結果がNULLになる } function insertHoge() { $sql = "INSERT INTO hoge ('name') VALUES('ABC')"; $result = $this->query($sql); return $result; } function getHoge() { $sql = "SELECT id FROM hoge WHERE name='ABC'"; $result = $this->query($sql); return $result; } ●idが取得できる方法 function main() { $id = $this->insertHoge(); ←idがかえってくる } function insertHoge() { $sql = "INSERT INTO hoge ('name') VALUES('ABC')"; $result = $this->query($_sql); $sql = "SELECT id FROM hoge WHERE name='ABC'"; $result = $this->query($_sql); return $result; }

    • 締切済み
    • PHP
  • INSERTとWHEREについて

    このようなデータベースがあるのですが、INSERT文を入れるとエラーになってしまいます。 +------+----------+----------------+----------+ | id | name | osusume | review | +------+----------+----------------+----------+ | 1 | エイリアン   | NULL | おもしろい | | 2 | スパイダーマン | NULL | NULL  | +------+----------+----------------+----------+ insert into movie(name,osusume,review) values('名無し',5,'つまらない') where id=2; 当たっているように思えるのですが、どこが間違っているのでしょうか??ご教示、お願いいたします。 ちなみにphpではこのようにデータベースに追記するつもりです。 $sql = <<<EOS insert into movie ( name, osusume, review ) values ( '$name', $osusume, '$review' ) WHERE id=2 EOS;

    • ベストアンサー
    • MySQL
  • 見たことのないINSERT文

    お世話になります。 他人の書いたSQLを解析して以下のようなコードを見つけました。 CREATE TABLE OYA ( ID NUMBER NOT NULL, NAME VARCHAR2(10) ) / CREATE TABLE KO ( ID NUMBER NOT NULL, OYA_ID NUMBER NOT NULL, NAME VARCHAR2(10) ) / INSERT INTO ( SELECT ID ,OYA_ID ,NAME FROM KO WHERE EXISTS ( SELECT ID FROM OYA WHERE NAME LIKE '%1' ) ) VALUES ( 1 ,1 ,'KODOMO-1' ); INSERT文でテーブル名を指定するかわりにSELECT文を指定しています。 SELECT INSERT文は知っていますが、このような表記は初めてです。 (文法エラーにならないのに驚きました) おそらく意図するところは、ある条件に一致したOYAが存在する場合に、KOをインサートするのだと思いました。 実際は、OYAがなくてもINSERTは実行されてしまいますが。。。 このような表記のINSERT文の説明が書いてあるサイトをご存知の方がいらっしゃいましたら、よろしくお願いします。

  • 指定された趣味を持つメンバーがいるグループを抽出するSQL

    グループテーブル、メンバーテーブル、趣味テーブルの3つのテーブルがあります。 あるメンバーはあるグループに属しており、趣味を1つ持っています。 以下がそのSQLです。 CREATE TABLE groups ( g_id int primary key ); CREATE TABLE members ( m_id int primary key , g_id int , h_id int ); CREATE TABLE hobbies ( h_id int primary key, h_name text ); INSERT INTO groups VALUES ( 1 ); INSERT INTO groups VALUES ( 2 ); INSERT INTO groups VALUES ( 3 ); INSERT INTO members VALUES ( 1, 1, 1); INSERT INTO members VALUES ( 2, 1, 3); INSERT INTO members VALUES ( 3, 1, 4); INSERT INTO members VALUES ( 4, 1, 4); INSERT INTO members VALUES ( 5, 2, 1); INSERT INTO members VALUES ( 6, 2, 2); INSERT INTO members VALUES ( 7, 2, 3); INSERT INTO members VALUES ( 8, 3, 2); INSERT INTO members VALUES ( 9, 3, 3); INSERT INTO members VALUES ( 10, 3, 4); INSERT INTO hobbies VALUES ( 1, 'sports' ); INSERT INTO hobbies VALUES ( 2, 'music' ); INSERT INTO hobbies VALUES ( 3, 'book' ); INSERT INTO hobbies VALUES ( 4, 'drive' ); 指定された趣味を持つメンバーがいるグループを抽出するにはどうすればいいでしょうか? 例えば、「読書が趣味なメンバーとドライブが趣味なメンバーがいるグループは?」「グループ1とグループ3」のような感じです。 一応自分で考えてみたのが、以下ですが、これだと趣味の指定が増減すると大きくSQLが変わってしまいます。 もっといいやり方はないでしょうか? 私はPostgreSQL8を使ってますが、汎用的なSQLであれば、そっちの方がいいです。 SELECT distinct m.g_id FROM members m join hobbies h ON m.h_id = h.h_id where h.h_name = 'drive' INTERSECT SELECT distinct m.g_id FROM members m join hobbies h ON m.h_id = h.h_id where h.h_name = 'book';

  • GROUPBY ORDER BY

    idの大きい順から並べたいのですがうまくいきません 調べて サブクエリなどを使い実行しましたがうまくいきませんでした ご教授お願いいたします ソース $sql='SELECT memberid,mailid,max(name),max(day) FROM messageall WHERE mailid=? GROUP BY memberid ORDER BY id DESC LIMIT '.$limit.' OFFSET '.$offset; サブクエリでも試しましたが正直 ソースがめちゃくちゃでデータが表示されませんでした。 ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • Insert文で・・・

    失礼します。SQL初心者なので質問します。 Insert into Aテーブル Select X , Y , Z From Bテーブル というSQLがあり、Aテーブルの列数を3から4にした際、AテーブルへのInsertの項目を、BテーブルからSelectされたX,Y,Z以外に普通の変数αも新たに作成した4つめの項目として同時にInsertしたい場合、どのようなSQLにすれば良いでしょうか? Insert into Aテーブル (Select X , Y , Z From Bテーブル),α みたいに都合良くはいきませんよね??

  • Pear::DBで、インサートしたプライマリーキーを取得したい

    宜しくお願い致します $dbはPear::DBを使用するとして... $db = DB::connect($dsn); $sql = "insert into Hoge (name) values (\"Name\")"; $res = $db->query($sql); これでDBに一行追加されるわけですが このときに追加した行のプライマリーキーを取得したいと考えています 何かいい手はございますでしょうか?

    • ベストアンサー
    • PHP
  • sqglについて

    sqlのlimitとdescは一緒に使えますか? 例 select * from hp order by limit id 0,20 order by id desc; idを小さい順に1~20個表示したいです。

    • ベストアンサー
    • MySQL

専門家に質問してみよう