mysqlで質問です。

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


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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/11/24 12:51:00
  • 終了:--

回答(5件)

id:asamaru No.1

asamaru回答回数4ベストアンサー獲得回数02004/11/24 13:14:34

ポイント16pt

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

SELECT COUNT(*)

FROM s_hoge

where s_hoge.s_genre_id=2;

ということでしょうか?

id:kunitz

ありがとうございます!

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

SELECT COUNT(*)

FROM s_hoge

where s_hoge.s_genre_id=2 limit 10;

2004/11/24 13:36:42
id:asamaru No.2

asamaru回答回数4ベストアンサー獲得回数02004/11/24 14:01:07

ポイント16pt

今確認しました。ヒット件数が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

id:kunitz

ありがとうございます!

2004/11/24 22:43:55
id:upride No.3

upride回答回数220ベストアンサー獲得回数12004/11/24 14:47:58

ポイント16pt

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

phpでしたら

affected_rows()で

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

(つまりselectした行数)

limit 10でselectしても

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

使えます

id:kunitz

ありがとうございます!

affected_rows

2004/11/24 22:44:16
id:upride No.4

upride回答回数220ベストアンサー獲得回数12004/11/24 14:50:56

ポイント16pt

SELECT COUNT(*)

FROM s_hoge

where s_hoge.s_genre_id=2 limit 10;

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

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

依存されるでしょう

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

id:kunitz

ありがとうございます!

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

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

2004/11/24 22:44:59
id:kyoko55 No.5

kyoko55回答回数2ベストアンサー獲得回数02004/11/27 02:58:32

ポイント16pt

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回のクエリを実行するよりは高速になる。」

ということらしいです。

id:kunitz

ありがとうございます!

SELECT FOUND_ROWS();

2004/11/29 20:21:59

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

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

トラックバック

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

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

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