プロが教える店舗&オフィスのセキュリティ対策術

よろしくお願いします。
このようなテーブルがあります。
テーブル名GAME
id name    price  genre_id  comment
1 FF1    100  1  おもしろい
2 カービー 200 3 丸い赤
3 バイオ   250 2 怖い
: : : : :
テーブル名GENRE
genre_id genre_name
1 RPG
2 ホラー
3 バイオ
このようなテーブルがあるとして、
検索したいカラム(id,name,g_id,comment)に対して検索キーワードに部分一致をしたものデータからソートしたいカラムと昇順降順のようにソートしページ数から
(ページ数-1)*10+1 ~ ページ数*10
最終ページのときは
(ページ数-1)*10+1 ~ 最終ページ
の部分のデータを取得する関数を作りたいです。表示するデータは
id name genre_name
です。
ページャーも使うので検索カラムにたいして検索ワードに部分一致した結果件数も戻り値として返したいです。

上記のsql文を教えてください。
またデータと結果件数を返す関数を作ることは可能でしょうか?
関数の引数は以下のように5つにするつもりです。

function getList($search_column,$search_word,$sort_column,$sort_order,$page_number)

どうかご教授ください。

A 回答 (5件)

FOUND_ROWS()は確かに便利だけど


http://kdl.weblogs.jp/open/2008/07/found_rows-48 …
の様な結果も出ているので私は利用していません。
ただし実際に自分のDBでの検証をしてはやい方を利用した方が良いでしょう。
    • good
    • 0

limit 付きSQL文にSQL_CALC_FOUND_ROWS を入れておけば、次に SELECT FOUND_ROWS();で、最初の SELECT が返したLIMIT 句なしで書かれた行数が得られます。


http://dev.mysql.com/doc/refman/5.1/ja/informati …
参考リンク内  FOUND_ROWS(); 関数参照

参考URL:http://dev.mysql.com/doc/refman/5.1/ja/informati …
    • good
    • 0

>件数を返すだけの関数なら、mysql_num_rows があります。


たしかこれって取得した結果の件数だから質問者がやっている
ページング処理時にLIMITを使った場合、取得した件数だけで全体の件数を取得できません。count(*)も似たような物ですけど
mysql_num_rowsを受けるだけでLIMITを利用していないSQLを発行するのは無駄ですので
Where句を同じにしたcount(*)を発行した方がスマートでしょう。

結局質問者は「最終ページ」を知るために全体での件数が必要でしょうから
    • good
    • 0

 件数を返すだけの関数なら、mysql_num_rows があります。


http://www.php.net/manual/ja/function.mysql-num- …

 phpで件数毎にページングしたいなら、urlから、"表示開始行番号(以下例だとstart)"と、"何件表示するか(以下例だとnum)"、検索用語が必要ならそれも(以下例ならq)、またカラム名も必要ならそれもgetして、その分、select文でとってきて表示するのがセオリーな気がしますが・・・

例)ttp://aaa.jp/search?q=テスト&start=10&num=20&colm1=id name・・・

 これを関数化してもあまりオトクな感じが・・・。方向性が間違ってたらすいません。
    • good
    • 0

count(*)

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!