2017-11-21 29 views
1
select SQL_CALC_FOUND_ROWS, col1 , mytable.id from mytable group by col1; 

select found_rows(); 

select found_rows() , col1 , mytable.id from mytable group by col1; 

これ以上のクエリは常に見つけ行に対して1を結果を返します。私はPHP 7.1とmaria db 10.1を使用しています。SQL_CALC_FOUND_ROWSは常に1

私のバックエンドはlaravel 5.5です。私はmysqlでDB :: raw requestを作成しています。 サーバーのApacheランプサーバー。

これはバグですか、これには何らかの方法がありますか?あなたが選択したフィールド

FOUND_ROWSの一部であることをCOL1を持つべきであるよう

+0

なぜ1つのクエリで 'COUNT(mytable.id)'を使用しないのですか? –

+0

私はカウントを変更するグループを持っているためです。 found_rows()を使う必要があります。だから、この質問の解決策を出さないようにしてください。クエリを正確に保つために投稿していない余分な条件のため、置き換えることはできません。 –

+0

@SebastianBrosch pls check https://stackoverflow.com/questions/8222417/what-is-the-difference-of-using-count-and-found-rows-if-i-dont-use-a-limit – subhajit

答えて

0

例のクエリは前のクエリで検索された行の数を返し、間違っているようです。 最初のクエリの結果を確認しましたか?返す行の数 2つ以上の行を返す場合、クエリの間にあるクエリが実行され、同じセッションでfound_rows()が選択されることを意味します。 この問題の再現には成功しませんでしたが、トランザクションをここで試してみてください。他の部分で

-

あなたがテーブルから個別のカウントを取得しようとしているが、何らかの理由でグループを使用しているようだクエリから。

select count(1) from (<your query goes here>) 
+1

私は彼が実際の質問を投稿していないと思います。彼はfound_rows()関数を使用して、条件とともに行数を取得したいと考えています。しかし、それは動作しません。 countとfound_rowsは異なる理由で機能します。彼が提供したリンクをチェックしてください。 https://stackoverflow.com/questions/8222417/what-is-the-difference-of-using-count-and-found-rows-if-i-dont-use-a-limit – subhajit

1

解決方法1:

MySQLのバージョンを確認してください

は、2番目の最良の選択肢である、あなたはこれがあなたのために動作しない場合

select count(disctinct col1) from mytable 

を使用してみました。このバグは5.6。*にあり、5.6.11リリースで解決されています。サーバーが[5.6。* < 5.6.11]と異なるバージョンであることを確認してください。

これはmysql [not mariadb]に投稿されたバグです: http://bugs.mysql.com/bug.php?id=68458です。

はmysqlのバージョンを確認している場合は、その説明の下にチェック:

注:5.6.11-ログソースの配布 『「からコンパイルMySQLサーバ』はまだ持っているバグのリンクに記載されていますこのバグ。


解決方法2:

FOUND_ROWS()とリミット同じクエリでは、総数にはなりませんが、制限付きデータのカウントを提供します。 選択クエリには限界がある場合は、

"select SQL_CALC_FOUND_ROWS, ....... limit x;" 

を使用する必要がありますし、SELECT文の制限は、あなたが存在しない場合は、すぐに次の

"select found_rows();" 

OR

を実行します直接実行可能

"select found_rows(), .......;" 

説明:https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_found-rows

+0

debian jessie、phpを使用しています7.1.11、phpmyadmin 4.7.4、mariadb 10.2。それでも私のクエリは失敗します: mytable.col2によってcol1順にmytableグループからSQL_CALC_FOUND_ROWS、col1、mytable.idを選択します。desc limit 10 offset 10; select found_rows(); – subhajit

関連する問題