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


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

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

回答の条件
  • 1人2回まで
  • 登録:2006/05/04 02:22:35
  • 終了:2006/05/04 23:14:35

ベストアンサー

id:bonlife No.1

回答回数421ベストアンサー獲得回数752006/05/04 13:26:26

ポイント60pt

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を加工することで、ご要望の機能を実現できます。

参考になれば幸いです。

id:esecua

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

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

2006/05/04 23:11:18

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません