人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP&MySQL hatenaというDBに wordとnumber、whyというカラムがあります。 wordには文字が入っておりnumberにはauto_incrementで振った番号が入っており、whyには0から10まで数字が入っています。

word like '%$search_word%'のような感じで検索し、whyに入っている数が多い順で表示するにはどうしたらいいのでしょうか?この際にwhyの数が同じ場合はnumberに入っている数が多い順に表示させたいと思っています。また、データ量が多いので、10レコードづつ表示することも考慮してください。

簡単なソースなどお願いします。

●質問者: esecua
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:DB Hatena MySQL Number PHP
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ●
●60ポイント ベストアンサー

SQLは以下のようになります。

SELECT *
FROM hatena
WHERE word like '%$seach_word%'
ORDER BY why DESC, number DESC
LIMIT 0, 10
;

whyの降順(値が大きい順)、numberの降順でソートします。

このように複数条件をORDER BY句に指定することで1つ目の条件が一致する行を2つ目の条件でソートすることができます。

LIMITの意味は2つ引数を取る場合、1つ目の引数分の検索結果を無視(OFFSET)して、2つ目の引数の行数だけ値を返します。

上記の例では、1行目(0行無視)から10行分の検索結果を取得します。

以下のようにすることで、11行目から10行分の検索結果を取得することができます。

SELECT *
FROM hatena
WHERE word like '%$seach_word%'
ORDER BY why DESC, number DESC
LIMIT 10, 10
;

これを応用すれば10行ずつ取得することが可能です。

LIMITの1つ目の引数の値を10ずつインクリメントすることで、10行ずつ取得できます。

最初に

SELECT COUNT(*)
FROM hatena
WHERE word like '%$seach_word%'
;

として検索条件に合う行数を取得しておき、その値を元にLIMITの1つ目の引数を10ずつインクリメントするようにPHP側でSQLを加工することで、ご要望の機能を実現できます。

参考になれば幸いです。

◎質問者からの返答

bonlifeさん最高!いつも回答していただいているんですが、bonlifeさんはいつもピンポイントで適切な回答をしていただいていますので、ありがたいです。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ