SQLについて質問です。


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ページずつ取得していく方法しかないかなと思います。

宜しくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/07/04 00:00:56
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント27pt
SELECT * FROM
 店舗
 ORDER BY 掲載種別 DESC,
    CASE 掲載種別 WHEN 1 THEN rand() ELSE 0 END,
    閲覧数 DESC

ってとこ?

id:ruijio

回答ありがとうございます。

掲載種別が、1の時はrand()でランダム順で、0 の時は、閲覧数の降順で、、END・・・。

解るような解らないような。

でも、お陰さまで結果解決できました。有難うございました。

2008/07/03 23:55:40

その他の回答2件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440ここでベストアンサー

ポイント27pt
SELECT * FROM
 店舗
 ORDER BY 掲載種別 DESC,
    CASE 掲載種別 WHEN 1 THEN rand() ELSE 0 END,
    閲覧数 DESC

ってとこ?

id:ruijio

回答ありがとうございます。

掲載種別が、1の時はrand()でランダム順で、0 の時は、閲覧数の降順で、、END・・・。

解るような解らないような。

でも、お陰さまで結果解決できました。有難うございました。

2008/07/03 23:55:40
id:kunyami No.2

回答回数24ベストアンサー獲得回数4

ポイント27pt

select *

from TABLE_NAME

order by 掲載種別 desc, case 掲載種別 when 1 then 0 else 閲覧数 end desc

limit 20 offset ?;

とかかな?

id:ruijio

回答有難うございます。

やってみましたが、結果何も返ってきませんでした(?_?)

でもb-windさんの回答で解決してます。有難うございました、また機会がありましたら宜しくお願い致します。

2008/07/03 23:57:00
id:chuken_kenkou No.3

回答回数722ベストアンサー獲得回数54

ポイント26pt

こんな感じでどうでしょう。

select *
 from t1
 order by 掲載種別 desc,case 掲載種別 when 1 then rand() else 閲覧数 end desc 
 limit 0,10
id:ruijio

回答有難うございます。

b-windさんと殆ど同じでしょうか。試してみましたが、うまく行きました。

あ、そうか、返信しながら気付いたのですが、b-windさんのは、並び替えのルールが3つあって、chuken_kenkouさんのは、並び替えのルールが2つところが違うのですね。

SQL文を理解できたわけじゃないですが、お陰さまで解決に至りました。有難うございました。

2008/07/04 00:00:36

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません