例えばselect文でlimitをかけた場合、limitをかけない場合の検索該当個数を得る方法などがあったら教えてください。
2回同じようなsqlをはくのが効率悪いと考えています。
select * from s_hoge where s_hoge.s_genre_id=2 limit 10 offset $offset”;
Yahoo! JAPAN
質問の意味を取り違えていたらすみません。
SELECT COUNT(*)
FROM s_hoge
where s_hoge.s_genre_id=2;
ということでしょうか?
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
・
・
・
ありがとうございます!
利用する言語がわからないですが
phpでしたら
affected_rows()で
影響がある行数を返してくれます
(つまりselectした行数)
limit 10でselectしても
10件もレコードない場合とかでも
使えます
ありがとうございます!
affected_rows
Yahoo! JAPAN
SELECT COUNT(*)
FROM s_hoge
where s_hoge.s_genre_id=2 limit 10;
これで取れるカウント数は
この条件にかかるレコード数に
依存されるでしょう
0〜10までの範囲だと思いますが。
ありがとうございます!
一ページに10件ずつ項目を表示して、
且つ何件ヒットしたかも表示しておきたい場合を想定しています。
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();
ありがとうございます!
?↓だと何がカウントにはいります?
SELECT COUNT(*)
FROM s_hoge
where s_hoge.s_genre_id=2 limit 10;