質問 > フロント機能 > 商品一覧(ソート)を思い通りにしたいのですが・・・ |
フロント機能
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
kanagettyo |
投稿日時: 2012/12/19 18:56
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2012/12/13 居住地: 投稿: 26 |
Re: 商品一覧(ソート)を思い通りにしたいのですが・・・ > T3.rank * 2147483648 + T2.rank
あまり意識した事がなかったので、考えてみました。 2147483648はphpのint型の上限に引っかかる値なので… この値を超える場合はintからfloatの値になりそうですね。 T3.rank(int) , T2.rank(int)となっていますので、片方をfloatに変更する事で足し算の結果を一意のものにしているのではないでしょうか? 例えば、T3.rankが「1」でT2.rankが「2」のものと… T3.rankが「2」でT2.rankが「1」のものがあった場合に 単純な足し算ですと、両者とも3となってしまいます。 そこで、片方をintでは表現できない数字に直す事で重複を防いでるような気がします。 ちなみにT3.rankはdtb_categoryのrankで… T2.rankはdtb_product_categoriesのrankですので、今回の場合であれば使う必要は無いと思われます。 |
zeory |
投稿日時: 2012/12/19 17:41
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2012/12/17 居住地: 投稿: 6 |
Re: 商品一覧(ソート)を思い通りにしたいのですが・・・ kanagettyo様 ありがとうございます。
せっかく教えていただいたのですが、私の環境では、システムエラーとなってしまいました。 そもそも > SELECT > T3.rank * 2147483648 + T2.rank この行の意味がわかりません。。 このデフォルトの書き方が理解できないので、思い通りの表示順にならないのではないかと思っています。 これだと大きいただの数字になってしまう気がします。 これは数字で表示順を決めるという特別な手法なのでしょうか? かなり調べたのですが、わからず、どうもこの行がネックな気がします。。。 1週間くらいこの問題から抜け出せずにいます。。。 SQLを勉強したらいいのか、MVCについて勉強したらいいのか、どこからのアプローチでこの問題を解決したらいいのかさえわからなくなっています。。 orz |
kanagettyo |
投稿日時: 2012/12/19 14:31
対応状況: −−−
|
半人前 ![]() ![]() 登録日: 2012/12/13 居住地: 投稿: 26 |
Re: 商品一覧(ソート)を思い通りにしたいのですが・・・ $objQuery->setOrder($order)にてソートが実行されます。
また、setOrder($order)は「'ORDR BY' . $order」のようになっていると思います。 なので、setOrder($order)の$order部分に、ソートを実行するSQL文を指定してあげれば想定された動作になるかと思います。 投稿者さまの場合であれば… $order = 'dtb_products.deliv_date_id DESC ,dtb_product_status.product_status_id DESC'; $objQuery->setOrder($order); という感じでしょうか。(ちなみに私の環境では、「setOrder」の「O」は小文字でしたが…) もしシステムエラーが発生した場合は、以下のような可能性があります。 ?「dtb_products.deliv_date_id」か「dtb_product_status.product_status_id」がデータベースに存在しない ?取得結果に「deliv_date_id」か「product_status_id」が存在しない 最後に個人的な疑問ですが、「deliv_date_id」と「product_status_id」のソートで投稿者様の意図した並び替えになりますでしょうか? 両者の「id」が、求めている「納品目安」や「商品ステータス」を表しているか不安でした。杞憂であれば良いのですが… |
zeory |
投稿日時: 2012/12/17 16:35
対応状況: −−−
|
新米 ![]() ![]() 登録日: 2012/12/17 居住地: 投稿: 6 |
商品一覧(ソート)を思い通りにしたいのですが・・・ [EC-CUBE] 2.12.2
[PHP] 5.1.6 [データベース] MySQL 5.0.77 商品一覧で、納品目安順(dtb_productsのdeliv_date_id)で、かつ、商品ステータス順(dtb_product_statusのproduct_status_id) にしたいと思っています。 LC_Page_Products_List.phpの205行目あたりの下記部分をいじればいいと思うのですが どのようにすればいいのか、ご教授ください。 default: if (strlen($searchCondition['where_category']) >= 1) { $dtb_product_categories = '(SELECT * FROM dtb_product_categories WHERE '.$searchCondition['where_category'].')'; $arrOrderVal = $searchCondition['arrvalCategory']; } else { $dtb_product_categories = 'dtb_product_categories'; } $order = <<< __EOS__ ( SELECT T3.rank * 2147483648 + T2.rank FROM $dtb_product_categories T2 JOIN dtb_category T3 ON T2.category_id = T3.category_id WHERE T2.product_id = alldtl.product_id ORDER BY T3.rank DESC, T2.rank DESC LIMIT 1 ) DESC ,product_id DESC __EOS__; $objQuery->setOrder($order); break; 表現が難しいのですが、カテゴリーを選択しない状態では、 カテゴリーも、商品IDも関係なく、納品目安順かつ商品ステータス順に並べ替えたいと思っています。 カテゴリーを選択した状態でも、選択したカテゴリーの中で、納品目安順かつ商品ステータス順に表示したいです。 SC_Product.phpもいじらなければならないとなれば、そこも併せてご教授頂ければと思います。 よろしくお願い致します。 |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |