MySQLとPHPで店舗紹介サイトを作っています。
連番,店舗名,掲載種別,閲覧数
1,田中製薬,1,9
2,村井商店,0,15,
3,森生花店,1,34
4,居酒屋蘭,0,7
5,森永製菓,0,60
6,丸山米店,1,14
というような、店舗テーブルがあります。
掲載種別は、お金を頂いて掲載している店舗が1、サービスで掲載している店舗が0です。
店舗一覧ページ(20件/1p)では、「有料掲載店舗」・「無料掲載店舗」の順に表示したいと思ってます。
有料店舗はランダム表示、無料は閲覧数の高いページ順にデータを並び替えるSQL文は可能でしょうか?
可能であれば、そのSQL文を教えていただきたいと思います。
結果例として
6,丸山米店,1,14
1,田中製薬,1,9
3,森生花店,1,34
5,森永製菓,0,60
2,村井商店,0,15,
4,居酒屋蘭,0,7
このような感じです。1Pで処理するのであれば、php側で処理すればいいのですが、1p20件しか表示しないため、SQL側のlimitで20ページずつ取得していく方法しかないかなと思います。
宜しくお願いいたします。
SELECT * FROM 店舗 ORDER BY 掲載種別 DESC, CASE 掲載種別 WHEN 1 THEN rand() ELSE 0 END, 閲覧数 DESC
ってとこ?
SELECT * FROM 店舗 ORDER BY 掲載種別 DESC, CASE 掲載種別 WHEN 1 THEN rand() ELSE 0 END, 閲覧数 DESC
ってとこ?
回答ありがとうございます。
掲載種別が、1の時はrand()でランダム順で、0 の時は、閲覧数の降順で、、END・・・。
解るような解らないような。
でも、お陰さまで結果解決できました。有難うございました。
select *
from TABLE_NAME
order by 掲載種別 desc, case 掲載種別 when 1 then 0 else 閲覧数 end desc
limit 20 offset ?;
とかかな?
回答有難うございます。
やってみましたが、結果何も返ってきませんでした(?_?)
でもb-windさんの回答で解決してます。有難うございました、また機会がありましたら宜しくお願い致します。
こんな感じでどうでしょう。
select * from t1 order by 掲載種別 desc,case 掲載種別 when 1 then rand() else 閲覧数 end desc limit 0,10
回答有難うございます。
b-windさんと殆ど同じでしょうか。試してみましたが、うまく行きました。
あ、そうか、返信しながら気付いたのですが、b-windさんのは、並び替えのルールが3つあって、chuken_kenkouさんのは、並び替えのルールが2つところが違うのですね。
SQL文を理解できたわけじゃないですが、お陰さまで解決に至りました。有難うございました。
回答ありがとうございます。
掲載種別が、1の時はrand()でランダム順で、0 の時は、閲覧数の降順で、、END・・・。
解るような解らないような。
でも、お陰さまで結果解決できました。有難うございました。