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

mysqlで質問です。
例えばselect文でlimitをかけた場合、limitをかけない場合の検索該当個数を得る方法などがあったら教えてください。
2回同じようなsqlをはくのが効率悪いと考えています。


select * from s_hoge where s_hoge.s_genre_id=2 limit 10 offset $offset”;

●質問者: kunitz
●カテゴリ:コンピュータ
✍キーワード:MySQL SELECT SQL 検索
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● asamaru
●16ポイント

http://www.yahoo.co.jp/

Yahoo! JAPAN

質問の意味を取り違えていたらすみません。

SELECT COUNT(*)

FROM s_hoge

where s_hoge.s_genre_id=2;

ということでしょうか?

◎質問者からの返答

ありがとうございます!

?↓だと何がカウントにはいります?

SELECT COUNT(*)

FROM s_hoge

where s_hoge.s_genre_id=2 limit 10;


2 ● asamaru
●16ポイント

http://www.yahoo.com/

Yahoo!

今確認しました。ヒット件数が10を超える場合でもすべてのヒット件数を出してくれます。ただ、この記述でlimitをつける意味はあまりないと思います。

select bar, count(*)

from s_hoge

where s_hoge.s_genre_id=2

group by bar

limit 10

こういうSQLを書いた場合には、

barの表示件数が10件以下に絞られます。

〔結果〕

Bar count(*)

-----

A 13

B 9

C 120

◎質問者からの返答

ありがとうございます!


3 ● upride
●16ポイント

http://google.co.jp/

Google

利用する言語がわからないですが

phpでしたら

affected_rows()で

影響がある行数を返してくれます

(つまりselectした行数)

limit 10でselectしても

10件もレコードない場合とかでも

使えます

◎質問者からの返答

ありがとうございます!

affected_rows


4 ● upride
●16ポイント

http://yahoo.co.jp/

Yahoo! JAPAN

SELECT COUNT(*)

FROM s_hoge

where s_hoge.s_genre_id=2 limit 10;

これで取れるカウント数は

この条件にかかるレコード数に

依存されるでしょう

0〜10までの範囲だと思いますが。

◎質問者からの返答

ありがとうございます!

一ページに10件ずつ項目を表示して、

且つ何件ヒットしたかも表示しておきたい場合を想定しています。


5 ● kyoko55
●16ポイント

http://dev.mysql.com/doc/mysql/ja/Nutshell_4.0_features.html

Search Results: Nutshell_4.0_features.html

上記URLの最後の方にその記述があります(詳しく載っていませんが...)。

ただ、バージョンに依存するみたいです。

ご質問と同様の動作を私も求める機会が多々ありますが、

最初のクエリに「SQL_CALC_FOUND_ROWS」というキーワードを追加し、次に

FOUND_ROWS()を呼び出します。

使い方としては

SELECT SQL_CALC_FOUND_ROWS * from s_hoge where s_hoge.s_genre_id=2 limit 10 offset $offset

の実行直後、

SELECT FOUND_ROWS();

を実行することで、一番最近に実行されたSELECT文でlimit句で行数を限定しなかった場合の全ての行数も計算してくれます。

下記URLには速度の面に言及しています。

http://d.hatena.ne.jp/tekTech/20040405

2004-04-05 - tekTechめも

上記URLによれば、

「当然つけない場合よりも遅くなるが、count(*)と2回のクエリを実行するよりは高速になる。」

ということらしいです。

◎質問者からの返答

ありがとうございます!

SELECT FOUND_ROWS();

関連質問


●質問をもっと探す●



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