データテーブルを作る
サイトに付随する登録データのうち、要素が可変のものは別テーブルに。そうすれば
サイト情報自体には入れなくていいから「カテゴリ用カラムをいくつ入れよう?」などと悩む必要もなくなります。
重要度(PRIORITY)を指定できるようにしておけば、サイトごとにそれでソート可能だし、登録数が多いようなら上限を設けて、一覧には一定数しか出さないようにすればいい(詳細情報ページには全部出す)。
したがって各種登録データを格納するテーブル群は、ユーザ情報とサイト情報以外はほとんど各マスタの値を保存するだけとなり、かなり小さなテーブルに。
たとえばこんなサイト情報(D_SITE)と基調(D_MOOD)が登録されていたとして、
ID |
NAME |
MEDIA |
1 |
ほげほげ |
0 |
2 |
ほにゃらら |
1 |
3 |
ふにふに |
0 |
SITE_ID |
MOOD_ID |
1 |
1 |
1 |
3 |
2 |
1 |
こんなクエリを発行すれば、基調ごとの登録サイト数がわかります。
SELECT M.ID AS ID, M.NAME AS NAME, COUNT(D.SITE_ID) AS TOTAL
FROM M_MOOD M, D_MOOD D WHERE M.ID = C.MOOD_ID GROUP BY ID
ID |
NAME |
TOTAL |
1 |
シリアス |
2 |
3 |
ラブラブ |
1 |
もっとも実際にはビューにするので、引っ張ってくるときにソート順をどうするかを考えるだけです。
メディアごとの登録サイト数は、これは他のテーブルではなくサイト情報自体が持っているデータなのでこんな感じ。
SELECT S.MEDIA AS ID, M.NAME || '向け' AS NAME, COUNT(S.MEDIA) AS TOTAL
FROM D_SITE S, M_MEDIA M WHERE S.MEDIA = M.ID GROUP BY S.MEDIA
ID |
NAME |
TOTAL |
0 |
PC向け |
2 |
1 |
携帯向け |
1 |
それにしても長年SQLを適当に書いてきたんで、どう書くのが正しいのかよくわからなかったり(^^;
たとえば上記のSQLだと、別名をつけなくても結果のヘッダはID、NAMEになるように見えるのに、PHPで取得するときはその名前じゃアクセスできないんですよね。なので単純にするためにすべてASをつけたけど……本当はどうするのが正しいんだろ?
2010/09/06 10:54:08
最終更新:2010年09月06日 10:54