ジメジメする梅雨のお悩み、一挙解決! >>

php、mysqlを勉強しております。

phpを使って、mysqlの複数レコードをまとめて削除する方法を探しています。

※テーブル名[sample]
ID NAME
1  ABC
2  BCD
3  CDE
4  DEF
5  EFG

このようなテーブルがあるとして、IDの2、3、5を削除したいと考えています。
その場合、下記のように3回、クエリを実行しなければいけないのでしょうか。

DELETE FROM sample WHERE ID = 2
DELETE FROM sample WHERE ID = 3
DELETE FROM sample WHERE ID = 5

詳しい方がいらっしゃいましたら、ご教授いただけないでしょうか。
よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

DELETE FROM sample WHERE ID IN ( 2,3,5)

    • good
    • 2

削除する対象や件数が都度変わる用途ならば、3回クエリを実行するのが望ましいと思います。



$targets = array(2,3,5);

$stmt = $mysqli->prepare("DELETE FROM sample WHERE ID = ?");
$stmt->bind_param('i', $id);
foreach ($targets as $id) {
_ $stmt->execute();
}
$stmt->close();
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSQL、2つのテーブルで条件一致したものだけdeleteする方法は?

オラクルSQLで質問です

やりたいことは、
テーブルAから以下の条件に該当するデータを削除する。
基本的にはテーブルBの内容と比較して、一致したもの。

条件(全ての条件を満たすこと)
 テーブルA.AAA = テーブルB.AAA
 テーブルA.BBB = テーブルB.BBB
 テーブルB.CCC > 0


調べたところ、SQLサーバでは以下のように
from を2つ書いて実現できるようです。
が、今回はオラクルなので文法エラーになります。

delete FROM テーブルA FROM テーブルB
where
テーブルA.AAA = テーブルB.AAA
AND
テーブルA.BBB = テーブルB.BBB
AND
テーブルA.CCC > 0
;
commit;


よろしくお願いします

Aベストアンサー

delete 文の細かい構文はちょっと覚えてませんが
サブクエリ使えばいいんじゃないですか

delete from table_a
where 主キーカラム = (
select table_a.主キーカラム
from table_a, table_b
where
指定の条件
)

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

Qテーブルの最後(最新)のレコードを抽出したい

宜しくお願いします。
PHP MYSQL の組み合わせで使っています

以下のようにして、最後のレコードを取り出したいのですが
まったく違う事をしているのかもしれません。

$sql =" select * from テーブル where フィールド='max' " ;

フィールドはauto_incrementで番号を振っています。
これで最大のつもりなのですが・・・。

他にも、レコードを入れた時間も記録したフィールドがあるのですが
どうしてよいか?判りません。

テーブルの最新のレコードを出したいのです。
**その中の一つのフィールドを取り出すのですが、
  それはうまくいっているみたいです 
  (max の所に数字を入れると表示します)

お手数かけますが、どなたかご教授お願いいたします。

Aベストアンサー

#2回答者です。

MySQL 4.1以前(サブクエリを使えない)なら、以下のような方法が考えられます。

select * from 表名
order by 列名 desc limit 1

QERROR1062:Duplicate entry.....というエラーが出てしまいました

いつもお世話になります。
データベースからSELECTで抽出したデータを別のテーブルにINSERTするSQLを実行したのですが、
ERROR1062:Duplicate entry.....というエラーが出てしまいました。
お詳しい方がいらっしゃいましたら、アドバイスをいただけませんでしょうか?よろしくお願いいたします。
【実行したSQL】
INSERT INTO tblA (dataA1, dataA2, dataA3, dataA4) SELECT "9001","AA",dataB1,dataB2 FROM tblB WHERE dataB1 = 52

tblAの主キー:dataA1とdataA2
tblBの主キー:dataB1

dataA1とdataA2はtblAの主キーとなっているため、重複してしまうということのようです。tblBの主キーはdataB1であるため、抽出されてくるデータは常に1件なので問題ないと期待していましたが、甘くなかったようです。何か良い方法はないものでしょうか?よろしくお願いいたします。

Aベストアンサー

「ERROR 1062」は、重複データを格納しようとした場合に出力されるエラーです。
既にdataA1='9001'&dataA2='AA'という行が、tblAに格納されているのですよね?

>抽出されてくるデータは常に1件なので問題ないと期待していました

「insert ~ select ~」を実行前に、既に同じデータが格納されているのでは?
あるいはprimary keyの指定が、質問中に記された通りでなく、2件以上検索されているかです。

>何か良い方法はないものでしょうか?

何をするための方法を、聞きたいのかが分かりませんが?

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

QDBエラーの意味

フォームからDBにデータ挿入しようとすると

Column count doesn't match value count at row 1

というエラーが出てしまいます・・・どういう意味を持ったエラーなんでしょうか?

Aベストアンサー

カラム数と値の数が合わない、と言う事です。簡単な英語なので覚えましょう。
カラム数が4つにもかかわらず、
"INSERT INTO tablename VALUES (1,'hoge',3)"
とやった場合等に出るエラーだと思います。

Q1テーブル&複数レコードの更新に対して1度のupdate文での処理方法

1テーブル&複数レコードの更新に対して1度のupdate文での処理方法

Delphi2010+SQL SERVER 2005で開発しています。

update文で、
現在下のようにwhileで複数レコードに対して、
1回、1回、sqlを発行して、更新しています。
これを、一度のSQLの発行で処理できないものでしょうか?
更新テーブルは1つで、更新する項目も同じです。
更新するデータと、where句の条件が異なります。

もし可能なようでしたら、どうかご教授お願いします。

update table set A=1,B=2 where id=1
update table set A=2,B=3 where id=5
update table set A=9,B=99 where id=7
update table set A=5,B=10 where id=15
update table set A=1,B=10 where id=75

Aベストアンサー

ですか・・・。
じゃあWhileで発行するのをやめたらどうですか?

BEGIN TRAN
update table set A=1,B=2 where id=1;
update table set A=2,B=3 where id=5;
update table set A=9,B=99 where id=7;
update table set A=5,B=10 where id=15;
update table set A=1,B=10 where id=75;
COMMIT

まとめて実行・・・。

QEXISTSを使ったDELETE文

「SELECT文の件数」と、
「同じSELECT文を使ったDELETE文の件数」が一致しない現象が起き、困っています。

【SELECT文】※2件返ってきます。
SELECT
  a.部署コード,
  a.社員コード
FROM
  社員マスタ a,
  組織マスタ b
WHERE
  a.部署コード = b.部署コード


【DELETE文】※50件 DELETEされます。
DELETE TABLE
  社員マスタ
WHERE
  EXISTS
  (
  SELECT
    a.部署コード,
    a.社員コード
  FROM
    社員マスタ a,
    組織マスタ b
  WHERE
    a.部署コード = b.部署コード
  )


環境はSQLSERVER2005です。
件数はSQLSERVER2005のカウントオプションで表示されているものなので間違いないです。

宜しくお願いします。

Aベストアンサー

EXISTS 句は、副問い合わせが行を返した場合 TRUE そうでない場合 FALSE と評価されます。

例示いただいた副問い合わせは TRUE を返すので DELETE されます。

詳細については、SQLの入門書を参考にしてください。

QonClickに複数の関数を挿入する方法

初心者なのですがアニメーションの関数anime1、anime2、anime3を作成し、onClickに下記のように設定しました。
クリックするとアニメーション2つの設定ではは動くのですが、3つ目を設定すると動かなくなります。
通常はこのような設定はしないものなのでしょうか?
教えてください。
よろしくお願いします。
<INPUT type="button" value="START" onClick="anime1(), anime2()">・・・OKです。
<INPUT type="button" value="START" onClick="anime1(), anime2(),anime3()">・・・動きません。

Aベストアンサー

セミコロンでつなぐのが常道ですが、3つ以上なら
別途function化したほうが、可読性が高くなると
思います。

Q日付型カラムへのデータINSERT

お世話になります。ひとつご教授ください。

オラクル10g, ojdbc14でjdk1.4.2から接続です。

INSERT命令を使ってテーブルにレコードを追加する際に、DATE型のカラムに対して

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27 12:00:00', ...);

を実行するとエラーORA-01861が出ます。そこで

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27', ...);

このように記述して再度実行すると通ります。

このようなとき、時間の部分まで設定した値をカラムに格納したいときはどうしたらよろしいでしょうか?

よろしくお願いします。

Aベストアンサー

ごめんなさい。
説明と文例が違ってしまいました。
正しくはこちらです。

INSERT TABLE_A (DATE1, ...) VALUES (to_date('2006-4-27 12:00:00','yyyy/mm/dd hh24:mi:ss'), ...);
というように、to_date関数を使うのが一般的かと思います。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報