• 締切済み

sqlについて質問です。

sqlについて質問です。 「timeカラムの新規5件以外を削除する」 というsqlを書きたいのですが、どのように書けばよいのでしょうか。 delete from [table] where time != tile desc limit 5 はちょっと違いますよね・・・

  • MySQL
  • 回答数2
  • ありがとう数6

みんなの回答

  • _yasuo
  • ベストアンサー率41% (16/39)
回答No.2

ほぼdelete文を使ったことないですが、感覚的な回答になりますが。。。 あと、[table]になんらかの行を特定するキー(主キー:sid)がある前提で、書いてみます。 delete from [table] where sid not in (select sid from [table] order by time desc limit 5); で、いけるようないけないような。

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

フラグのカラムを作っておいて処理してみては? update hoge set flg=1 order by `time` desc limit 5; delete from hoge where flg=0; みたいな感じ

関連するQ&A

  • sql offset

    offsetやlimitをつけると 結果が表示されなくなります。 $sql='SELECT naiyo FROM zyoho WHERE cityid=? OR brandid=? だけのSQLだと結果は表示されるのですが。 解決方法をご教授お願いいたします。 下記はソースです。 $page=1; $limit=2; $offset = $limit * ($page - 1); $lastpage = ceil($total / $limit); if($brandid=='') { $sql='SELECT naiyo FROM zyoho WHERE cityid=? OR brandid=? ORDER BY `code` DESC LIMIT'.$limit.' OFFSET '.$offset.''; }else{ $sql='SELECT naiyo FROM zyoho WHERE cityid=? AND brandid=?ORDER BY `code` DESC LIMIT'.$limit.' OFFSET '.$offset.''; } $stmt=$dbh->prepare($sql); $data[]=$cityid; $data[]=$brandid; $stmt->execute($data); $dbh = null;

    • ベストアンサー
    • MySQL
  • sql文で現在の時間と比較し期間が来たら削除したい

    すみません、分かる方がいたら教えてほしいです。 現在PHPファイル内に記述されているsql文に修正を加えたいのですが、方法が分かりません。 実装したい内容は、表題の通りで、 現在は以下のコードで動いています。 $sql = "delete from hogehoge where limit_time<=now()"; おそらくデータベースhogehogeで、 今日の日付になれば、limit_timeに該当するテーブルは削除します。 という内容だと思っています。 これを、今日の日付がlimit_timeから2週間後になった時に削除する。 といったように、 削除する時期を変更したい場合は、どのように記述すればよろしいでしょうか? 拙い質問かもしれませんが、ご教授いただければと思います。

    • ベストアンサー
    • MySQL
  • 複数のテーブルにまたがるDELETE

    カラム構成が同じのtable_Aとtable_Bがあります。 DELETE FROM table_A,table_B WHERE Column_1='you' AND Column_2='his' ORDER BY datetime LIMIT count といった具合に、 table_Aとtable_Bにまたがってdatetimeカラムが小さい順にcountの数だけ削除しようとしていますが、上記のSQL文ではエラーが出てしまいます。 誤りをご指摘願えればと存じます。よろしくお願いいたします。 versionはMySQL - 5.0.24-community-ntです。

  • 別テーブルからSELECTした値を持つ行を削除するSQLは?

    削除 SQL がわかりません。 SQL-1 SELECT id FROM table2 WHERE date_in IS NULL; これで取得したidを持つレコード(別テーブル)を削除したいのですが、 どうすれば組み合わさるのでしょうか? DELETE FROM table1 WHERE id=???

  • SQLの結果が返ってこない

    PHP+mysqlで以下のようなSQL文で処理を行ったのですがデータが返ってきません。 $sql = 'SELECT * FROM books WHERE id=3'; $recordSet = mysql_query($sql); if(mysql_fetch_assoc($recordSet)){ while ($table = mysql_fetch_assoc($recordSet)) {        処理     } } mysqlの画面で SELECT * FROM books WHERE id=3 を入力してみるとしっかりと結果が返ってきます。 ちなみに1行目を、違うテーブルの $sql = 'SELECT * FROM podcast WHERE code=3 ORDER BY dcdate DESC LIMIT 0,3'; にしてみると、データが表示されます。 2日間かけてずっと試行錯誤してみたのですが、完全に行き詰ってしまったので、何か考えられる原因はありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 秀丸でSQLを書く際に SQLの予約語だけ大文字

    秀丸でSQLを書く際に SQLの予約語だけを、大文字に変換するよい方法は? たとえば select * from table_1 where id=1 order by id desc; と書いて、マクロを起動すると SELECT * FROM talbe_1 WHERE id=1 ORDER BY id DESC; となるようにするよい方法はありませんか? また、予約語が「強調」されると尚良いです。

  • PL/SQLのDELETE文について

    PL/SQLでDELETE文を書こうとしているのですが、 文法がわかりません。。。 分かる方がおられましたら、教えてくださいm(_ _)m 今、TABLE1を削除したいのですが、条件がいろいろあって、 以下のように書いてみたのですがダメでした。 こういう書き方は、できないんでしょうか・・・。 削除条件は、TABLE2に存在し、かつ、TABLE2のTENSUが0のもので、 TABLE3が存在しないものです。 DELETE TABLE1 FROM TABLE1 ,TABLE2 ,TABLE3 WHERE TABLE1.ID = TABLE2.ID AND TABLE2.TENSU = 0 AND Not Exists (SELECT TABLE3.ID FROM TABLE3 WHERE TABLE3.ID = TABLE2.ID) 説明が下手なので、うまく、伝わっているか、心配なのですが・・・、 よろしくお願いします。

  • SQL*PLUSでファイルからDELETE文

    お世話になります、 Oracle8のSQL*PLUSを使用方法についての質問です。 ローカルにファイル(delete.sql)を作成して SQL*PLUSからそのファイルを流してファイルの中身の処理を実行するという方法をご存知の方が いらっしゃったらおしえてください。 --delete.sqlの中身--------- delete from table_a delete from table_b delete from table_c delete from table_d delete from table_e 以下省略 よろしくお願いします。

  • SQLエラー

    検索システムの検索結果の分割をしようとしています。 しかしどうしてもSQL文にエラーがでてしまいます。 SELECT * FROM shops where (area='◯◯◯') ORDER BY id DESC limit0, 10 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'limit0, 10' at line 1 該当するSQL文は以下になります。 $query = "SELECT * FROM shops"; $where = array(); if (isset($_GET['area'])and($_GET['area'] !== '')) { $where[] = sprintf("(area='%s')", mysql_real_escape_string($_GET['area'])); } if (count($where) <> 0) { $query .= ' where ' . implode(' and ', $where) . ' ORDER BY id DESC '; }   $query .= "limit" . $page_num*10 . ", 10" ; limit句の使い方等間違いはないのかなと思うのですが、いかがでしょうか? アドバイスご教示いただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 複数の条件に該当する結果を、それぞれ2件ずつ取得したい

    こんにちは。 PostgreSQL 7でシステムを開発中ですが、同一テーブルから「列~の値が■のものを2件、列~の値が▲のものを2件、列~の値が●のものを2件、それ以外のものからランダムに2件を取得」したいのですが、実現できなくて困っています。 select * from table where culumn = 'data1' limit 2 union select * from table where culumn = 'data2' limit 2 というようなことなのですが、これでは「limit 2」でparse errorとなってしまいます。 できれば上記のSQL定義でビューを作りたいところなのですが、いい方法はないでしょうか? よろしくお願いします。