ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

初心者の為のSQLコミュのおすすめ商品表示

  • mixiチェック
  • このエントリーをはてなブックマークに追加
こんにちはSQL初心者です。

http://www.remise.jp/service/cart.htm

ルミーズカートのsql engineを使ってsqlを編集しています。

トップページにおすすめ商品を表示させる為に、おすすめ商品表示の「recommend」というフィールドを
作り、おすすめ商品表示にチェックが入っている商品をランダムで4つ表示させる為に、cart.plの

SELECT *FROM CART WHERE store_id='$store_id' AND minlot='' AND group1='$dec_g1' and group2='$dec_g2' ORDER BY group2,group3$order

上記の記述を

SELECT * FROM CART WHERE store_id='$store_id' AND minlot='' AND itemState='0' AND recommend='' ORDER BY RAND() LIMIT 4

としたのですが、何も商品を引っ張ってきませんでした。
sql engineのマニュアルを見たところ、

http://www.agtech.co.jp/html/v10manuals/10.10/sqlref/sqlref-06-3.html

rand関数には対応しているようなのですが、私の解釈が間違えているのでしょうか?
申し訳ありませんが、ご教授いただければと思います。

コメント(6)

ORDER BY句でRAND()関数を使うのではなく、行ごとに(商品データ1件ごとに)乱数を発生させて、その値によって並び替えるようにすれば良いのではないでしょうか?

以下で試してみてください。

SELECT *, RAND() AS random_number FROM CART WHERE store_id='$store_id' AND minlot='' AND itemState='0' AND recommend='' ORDER BY random_number LIMIT 4
SoRA様

回答いただきありがとうございます。
SoRA様のいただいた構文そのままのSQLを使用してみましたが、やはり何も商品を拾ってきませんでした。
random_nomberのフィールドをCartテーブルに追加してないからかとおもい追加してみましたが、
やはり特に何も拾ってこないですね。

試しに、ORDER BYなしで
SELECT *, RAND() AS random_number FROM CART WHERE store_id='$store_id' AND minlot='' AND itemState='0' AND recommend=''

こちらでやってみましたが、こちらでも何も拾ってきませんでした。

何か不備などがありましたら教えていただけますでしょうか。
1.recommend=''のデータ、存在してますか?
データ型とかどうしたのかわかりませんが、おすすめが「空文字列」になっているのが条件としか読めませんが。

2.itemState='0'のデータ、存在してますか?
itemState='0'の意味する所は知りませんが。
ざぶ様:ご質問ありがとうございます。
recommend、itemStateともに存在しています。
recommendはおすすめ商品のフラグで、チェックを入れないとおすすめ商品、
チェックを入れるとおすすめ商品として表示しないようにしてあります。
recommendは商品表示のフラグから引用しているもの為、同じ動きをします。

itemStateは商品状態で、新品、中古を分けるものとなっております。

なので、
SELECT * FROM CART WHERE store_id='$store_id' AND minlot='' AND itemState='0' AND recommend=''

上記のように記述すると商品は表示されます。

ところが、RAND関数の記述を入れると何も商品を取ってこない状況となっております。
何か原因などわかりましたらぜひご教授ください。

ちょっとこちらで調べてみたのですが、ルミーズカートのSQL Engine(sql-engine.pl)は>>0にリンクされているマニュアルページのSQL Engine(Pervasive SQL Engine)とは別物ですね。

ルミーズカートに同梱のsql-engine.plを読んでみたところ、RAND()関数は提供されていないようです。
sql-engine.plの最新版は
http://www.vector.co.jp/soft/unix/business/se182749.html
からダウンロードできますが、マニュアルは付属しておらず、オンラインマニュアルページ
http://www.edit.ne.jp/~deagle/software/se/manual/
も存在しないようなので詳細は不明なのですが…。

ということで、取得結果をランダムに並び替える場合はCGI側に処理を実装する必要があるようです。
これに関してはコミュ違いとなるので、CGIまたはPerl関連のコミュで質問されることをお勧めします。
SoRA様:調べていただきありがとうございました。
どうも最新バージョンもRAND()は対応していない様子です・・・
Perl側で良い方法を模索してみたいと思います。

ありがとうございました!

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

初心者の為のSQL 更新情報

初心者の為のSQLのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング