例えば
飲み物、お菓子、電化製品、事務用品 等の複数のグループがあってグループIDでひも付けして各商品レコードがあります。
それらの商品を一覧ページに表示させた時に同じグループの商品が一ページに密集して集まるのを防ぐ為に1ページには同じグループの商品は基本2つまで表示させたいです。
※ページャー機能付き
一覧ページの商品は10個まで表示としてグループによって商品の数に違いがあるので2ページ目、3ページ目と進んで行くうちに残ったグループが2つずつの表示では10個表示されない場合は10個を満たすまで2つずつ残ったグループの商品を表示させたいです。
この処理をMYSQLだけでやる事は可能でしょうか。
php側で処理を行なってJSONでキャッシュも考えたのですが検索条件(where)が何万通りあるのでキャッシュは難しそうです。
よろしくお願いします。
SQL文だけでは実現できません。
理由は、グループの組み合わせの数だけwhere句を用意するか、サブクエリを用意する必要があるためで、現実的ではないためです。
PHP側なら実現できるでしょうが、お気づきのように何らかの形で全部の組み合わせをキャッシュする必要がありそうです。
具体的には、次の2つの値を持つ配列を用意します。
商品ID, グループID
この配列を10個単位で区切って、グループIDがなるべく重ならないようにするのです。
ストアードプロシージャ使ったらできそうな感じね。
パフォーマンスは変わらないみたい。
http://blog.asial.co.jp/1012
phpでグループID1つ1つMySQLにコールしたほうが早そうに思うわね。
プリペア使えばかなり早くなるはずよ。
あまり具体的な回答でなくてごめんなさいね。
ストアードプロシージャ知らなかったので確認してみます!
ありがとう御座います!
やはり、方法はないですよね。。一番、いい方法もう少し探ってみます。
2012/11/14 19:30:58ありがとう御座います。