- 締切済み
MySQL,PHPを使いデータとデータ件数を取得する関数
よろしくお願いします。 このようなテーブルがあります。 テーブル名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) どうかご教授ください。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- tom233
- ベストアンサー率17% (61/352)
FOUND_ROWS()は確かに便利だけど http://kdl.weblogs.jp/open/2008/07/found_rows-485b.html の様な結果も出ているので私は利用していません。 ただし実際に自分のDBでの検証をしてはやい方を利用した方が良いでしょう。
- hrm_mmm
- ベストアンサー率63% (292/459)
limit 付きSQL文にSQL_CALC_FOUND_ROWS を入れておけば、次に SELECT FOUND_ROWS();で、最初の SELECT が返したLIMIT 句なしで書かれた行数が得られます。 http://dev.mysql.com/doc/refman/5.1/ja/information-functions.html 参考リンク内 FOUND_ROWS(); 関数参照
- tom233
- ベストアンサー率17% (61/352)
>件数を返すだけの関数なら、mysql_num_rows があります。 たしかこれって取得した結果の件数だから質問者がやっている ページング処理時にLIMITを使った場合、取得した件数だけで全体の件数を取得できません。count(*)も似たような物ですけど mysql_num_rowsを受けるだけでLIMITを利用していないSQLを発行するのは無駄ですので Where句を同じにしたcount(*)を発行した方がスマートでしょう。 結局質問者は「最終ページ」を知るために全体での件数が必要でしょうから
- task2easy
- ベストアンサー率20% (5/25)
件数を返すだけの関数なら、mysql_num_rows があります。 http://www.php.net/manual/ja/function.mysql-num-rows.php phpで件数毎にページングしたいなら、urlから、"表示開始行番号(以下例だとstart)"と、"何件表示するか(以下例だとnum)"、検索用語が必要ならそれも(以下例ならq)、またカラム名も必要ならそれもgetして、その分、select文でとってきて表示するのがセオリーな気がしますが・・・ 例)ttp://aaa.jp/search?q=テスト&start=10&num=20&colm1=id name・・・ これを関数化してもあまりオトクな感じが・・・。方向性が間違ってたらすいません。
- tom233
- ベストアンサー率17% (61/352)
count(*)