人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MYSQLについて質問です。

例えば

飲み物、お菓子、電化製品、事務用品 等の複数のグループがあってグループIDでひも付けして各商品レコードがあります。

それらの商品を一覧ページに表示させた時に同じグループの商品が一ページに密集して集まるのを防ぐ為に1ページには同じグループの商品は基本2つまで表示させたいです。
※ページャー機能付き

一覧ページの商品は10個まで表示としてグループによって商品の数に違いがあるので2ページ目、3ページ目と進んで行くうちに残ったグループが2つずつの表示では10個表示されない場合は10個を満たすまで2つずつ残ったグループの商品を表示させたいです。

この処理をMYSQLだけでやる事は可能でしょうか。

php側で処理を行なってJSONでキャッシュも考えたのですが検索条件(where)が何万通りあるのでキャッシュは難しそうです。

よろしくお願いします。









●質問者: yu3ho7
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● oil999
●70ポイント

SQL文だけでは実現できません。

理由は、グループの組み合わせの数だけwhere句を用意するか、サブクエリを用意する必要があるためで、現実的ではないためです。

PHP側なら実現できるでしょうが、お気づきのように何らかの形で全部の組み合わせをキャッシュする必要がありそうです。
具体的には、次の2つの値を持つ配列を用意します。
商品ID, グループID
この配列を10個単位で区切って、グループIDがなるべく重ならないようにするのです。


yu3ho7さんのコメント
やはり、方法はないですよね。。一番、いい方法もう少し探ってみます。 ありがとう御座います。

2 ● 井戸端さん
●130ポイント

ストアードプロシージャ使ったらできそうな感じね。
パフォーマンスは変わらないみたい。
http://blog.asial.co.jp/1012

phpでグループID1つ1つMySQLにコールしたほうが早そうに思うわね。
プリペア使えばかなり早くなるはずよ。

あまり具体的な回答でなくてごめんなさいね。


yu3ho7さんのコメント
ストアードプロシージャ知らなかったので確認してみます! ありがとう御座います!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ