MySQLで特定のレコードが存在するかチェックする方法

PHP & MySQL のアプリケーションを開発していて、特定のデータがあるかどうか調べる、いわゆる「存在チェック」をしたくて調べたのでまとめます。

「簡単な方法」と「高速な方法」を紹介しています。特段の事情がなければ後者の「高速な方法」をおすすめします。私も後者を選択しました。とはいえ、そのテーブルは数千件しかレコードが入っていなかったので体感として感じるほどの高速化ではなかったですし、一般的な書き方は前者だと思います。。

なお、テーブル名は「sampleTable」、指定したいカラム名は「sampleColumn」とします。

簡単な方法

COUNTを利用します。

SELECT COUNT(*) FROM sampleTable WHERE sampleColumn = 1

高速な方法

簡単な方法で紹介したのと同様にCOUNTを利用します。

さらに、高速で処理するには LIMIT を追加します。1件だけあれば存在することになるので、ここでは LIMIT 1 としています。

SELECT COUNT(*) FROM sampleTable WHERE sampleColumn = 1 LIMIT 1

PHP

上記のような方法でSQLを実行し、その後コード側で処理します。

下記はPHP & PDOでのサンプルです。($pdoはPDOコネクション)

$sampleString = "サンプル";
$sql = "SELECT COUNT(*) FROM sampleTable WHERE sampleColumn = '$sampleString' LIMIT 1";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$count = $stmt->fetchColumn();

// 存在チェック後の処理 ※1
if ($count != 0) {
	echo "レコードあり";
} else {
	echo "レコードなし";
}

※1 $countが、integerで帰ってきたりstringで返ってきたりしていてよくわからなかったのでこの書き方にしました。本当は型ごと指定したいのですが。ローカルだとstringで返ってきて、Webにあるリモートサーバーだとintegerで返ってきました。ぜひ詳しい方教えてください…

以上です。

あとはテーブル名やカラム名を任意の値に変更してください。

私の場合は、カラム名は「id」として、特定のidのレコードが存在しているかチェックしました。

参考記事: https://qiita.com/maaaaaaaa/items/05892965fccb719cd8d1

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です