1. 短いSQLをループで実行する方法
例
// ユーザーIDの配列があるとする $userIds = [1, 2, 3, 4, 5]; foreach ($userIds as $id) { $sql = "SELECT name, age FROM users WHERE id = $id"; $result = $pdo->query($sql)->fetch(); // 取得結果をPHPで加工 }
特徴
- SQLはシンプルで読みやすい
- ループで何度もDBにアクセスするため「通信回数が増える」
- データベース側ではなくホスト言語側でロジックを書く必要がある
- 小規模データならわかりやすいが、大規模だとパフォーマンスが落ちる
2. 長いSQLで一気に処理する方法
例
SELECT id, name, age FROM users WHERE id IN (1, 2, 3, 4, 5);
特徴
- SQLが複雑になりがち(JOIN, GROUP BY, HAVING, サブクエリなど)
- 1回のクエリで必要な情報をまとめて取得できる
- ネットワーク往復が減り、DBの最適化機能をフル活用できる
- 大量データや集計処理はこの方式が効率的
3. 違いのまとめ
| 項目 | 短いSQLをループ | 長いSQL |
|---|---|---|
| 読みやすさ | シンプルで直感的 | 複雑化しやすい |
| DBアクセス回数 | 多い(遅くなる原因) | 少ない |
| 負荷の分散 | ホスト言語側で処理 | DB側で処理 |
| 適している場面 | 小規模データ、シンプル処理 | 大規模データ、集計、結合 |
✅ 実務的な指針
- 小さいアプリや少数のデータ → 短いSQL + ループでもOK
- データが多い、大量アクセスがある、集計処理が必要 → 長いSQLでまとめるのが基本