dポイントプレゼントキャンペーン実施中!

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

A 回答 (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個(複数個)とるときは変数への代入ができないため
テンポラリテーブルを作成することになります
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/12/09 11:20

会員全員にinsertなんてしなくても「空いた日付の部分」をphpで上手く処理すればいいだけ・・って何度言っても無視されるのは何故だろう。

以前サンプルコードも提示したハズなんだけど。

#まぁ「それが必要な仕様」だと言い張ってたけどね。

で、deleteのwhere条件はdayだけでいいだろう。deleteにdistinctとかわけがわからん。

そもそも仕様を決めるときに「どういうSQL文に落とし込めばできるか」って考慮していないのが決定的にアウトだよ。作り始めてから仕様の不備が見つかるなんて愚の骨頂だからね。お馬鹿SEの典型。必要なSQL文のイメージができないレベルで設計なんかできるわけがない。


相互リンク(直近のものだけ)
http://detail.chiebukuro.yahoo.co.jp/qa/question …
http://detail.chiebukuro.yahoo.co.jp/qa/question …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!