PHP+MySQLを使っているのですが、以下のような処理を行いたい時、どのような方法で実行するのがスマートですか?
■希望する動き
<DB側>
id name
1 バナナ
2 りんご
3 バナナ
4 みかん
5 りんご
6 ブドウ
<PHP側>
POSTで{"バナナ", "りんご", "みかん"}のような配列を受け取った時、
DB上のnameが合致するそれぞれの行数を知りたい。
(最終的に["バナナ"=>2, "りんご"=>2, "みかん"=>1]のような形にしたいです)
■自分で考えた方法
1.POSTされた配列の数だけSQLを実行する(COUNT句+WHEREで配列1要素を指定)
2.該当データを全部取り出してカウントはローカル側でやる(WHEREでORを使って取得→ローカル側でfor等で回してカウント)
3.該当データを全部取り出してサーバー上でカウントして返す
1だとSQLを実行する回数が多くなるので速度・負荷的に好ましくないと思いました。
2はサーバーからローカルに渡されるデータ量が大きくなる可能性があるので、少なくとも3でやるべきだとは思っています。
あまりデータベースやSQLについて詳しくないので、もしこれ以外のスマートな方法があるなら教えて頂きたく投稿しました。
「3でいいよ」などのご意見もありましたら頂けると助かります。
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。