• ベストアンサー

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"; 上で会員全員にインサート、下で会員全員の五行目から一行削除としているつもりですが、合ってますか??

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

  • ベストアンサー
  • 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