ここから本文です

PHPの質問です。 DBの同テーブル内に カラム名 title において 同じ文字列が存...

tvc********さん

2018/7/423:02:25

PHPの質問です。

DBの同テーブル内に カラム名 title において
同じ文字列が存在しているときに
1つ残して 残りのレコードを全て削除する方法を教えて頂けないでしょうか?

よろしくお願いします。

閲覧数:
43
回答数:
3
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

shimixさん

2018/7/507:54:44

テーブル内でレコードを特定するためのプライマリキーが存在しているという前提でいいのですよね?

また同一のtitleのレコードが複数ある場合に「どれを残すのか」はどのように取り決めますか(どれでもいいというのは困る)。一番新しいもの(もしくは古いもの)を残すというのであれば、前述のプライマリキーがauto_incrementになっているか作成日時のカラムが別途存在するかのどちらかは必須です(作成日時まで重複する可能性があるなら、前者であるべき)。

  • shimixさん

    2018/7/612:04:01

    delete from テーブル名 where id not in (select min(id) from テーブル名 group by title)

    でよさそうなものですが、delete対象のテーブルとサブクエリでselectするテーブルが同一というのはダメですね。

    #テンポラリにでもコピーして使えばいいんでしょうけど・・・


    php側でtitleごとに残したいid以外のもの(削除対象)を取得して

    select id from sample where id not in (select min(id) from sample group by title)

    の結果を配列にでもいれてSQL文のwhere conditionに

    $sql = 'delete from テーブル名 where id in ' . implode(',', $id_arr);

    にように組み立ててる方が手っ取り早いかもしれません。

  • その他の返信(1件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

gen********さん

2018/7/903:37:37

そのtitleカラムに対し、UNIQUEの設定をしてください。
これで一発です。

猛 処房さん

2018/7/423:45:54

SQLの質問では?

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる