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
この記事の著者
阿部 隼也
Abe Shunya
株式会社プッシュ 代表取締役社長・創業者。東京都出身。横浜市立大学在学中に当社を創業し、SEOなどデジタルマーケティング事業や、ChatGPT入門講座を代表とするプライムアカデミー事業を立ち上げた。技術も好きで、自らコードを書きながらサービスを開発する。
Twitter(X)アカウント