• メール重複チェック
    のSQL文で SELECT email ではなく S...
  • guest 
    メール重複チェックのSQL文で SELECT email ではなく SELECT count(*)とするのはなぜでしょうか?
    SELECT email ならクエリの結果の確認おいて、!empty(array_shift($result))としなくも!empty($result)と簡単に書くことができる気がします。
    今後の学習のためでしょうか?
    回答 1

    返信者画像

    ウェブカツ!!コーチ 
    講師からの回答
    今後の学習のためでもありますが、
    「そもそも何をするためのSQLなのか?」がSQLから読み取れる必要もあります。
    今の時点では一つのSQLしか扱っておらず、しかも使いたい時にそのSQLをその箇所に書く(コードの「ベタ書き」といったりします)という方法をしていますが、
    実際の現場では様々なSQLが書かれていて、しかもSQL文自体別のファイルとして管理されていて、それを随時使いたい箇所で読み出して使う。という方法をしています。
    (詳しくはフレームワーク部でやります)

    そうなれば、

    「同じSQLが増産される」

    可能性があるわけですね。
    そうなれば、いらないコードが増えていきます。
    同じSQLの書かれたファイルを使えばいいわけですからね。

    さらに同じSQLを「色々な箇所で使う」ということになるわけですから
    「SQLを修正することになった」場合に「影響範囲が広がる」ことになります。

    もし、

    SELECT email

    といった形で書けば「emailを取得するSQL」という役割になるわけなので

    emailを取得する箇所で多様されることになりますね。

    でも、実際には

    「合致したレコードがあるかどう(件数を取得する)」

    という目的で使ったものなのに。です。
    SQLも「命令」なので、誤解を生みやすい命令は避けた方がいいでしょう。
    (もちろん、SQLの書き方によって実際のSQLを実行した際の速度差があったりするので、そことの兼ね合いにもなります)