2017-11-11 3 views
0

my fiddleを見ると、クエリを実行していて、一致するすべての行の数を結果セットと共に取得しようとしていることがわかります。MySQL:結果セットと一致するすべての行の数を取得する

私はLIMITOFFSETで改ページをやっているので、私はそれらの画分の結果セットを返すかもしれませんが、一致していたすべて行数を取得したいです。

私のクエリで何が問題になっていますか?

SELECT item.*, COUNT(item.id) AS _count 
FROM item 
JOIN user 
    ON user.username = "Lansana" 
    AND user.deleted_at IS NULL 
JOIN user_item 
    ON user_item.item_id = item.id 
    AND user_item.user_id = user.id 
    AND user_item.deleted_at IS NULL 
WHERE item.deleted_at IS NULL 
GROUP BY item.id 
ORDER BY item.id DESC 

答えて

1

あなたの行ったことは、集約クエリでクエリを回すことです。ほとんどのデータベース(および最新バージョンのMySQL)では、selectにはgroup byにない集約されていない列があるため、エラーが発生します。

group byを含まないすべての集約クエリは、正確に1つの行を返します。あなたが行数をしたい場合は

、その後、CALC_FOUND_ROWS(文書化here)を使用します。

SELECT SQL_CALC_FOUND_ROWS item.* 
. . . ; 

はその後、別のクエリを発行します。

SELECT FOUND_ROWS(); 
+0

見つかり行は私が探しているものではありません。私は 'LIMIT'と' OFFSET'でページ区切りをしているので、結果の一部しか返さないかもしれませんが、一致したすべての行の数を取得したいと思います。編集した質問がより明確になる@Lansana。 – Lansana

+0

。 。そして、 'SQL_CALC_FOUND_ROWS'は*あなたが探しているものです。あなたはその文書を読んだことがありますか? "2番目のSELECTは、LIMIT句なしで最初のSELECTが返す行数を示す数値を返します。 –

+0

ああ、そうですよ!私はそれを間違って読んだ。本当にありがとう! – Lansana

関連する問題