1

検索を Coldfusion から MySQL ストアド プロシージャに移植しました。

実際の検索は、サイトで 2 回実行されます。1 回目はレコード数を取得し、2 回目は実際の結果を表示します。

したがって、両方の MySQL 構文は最後の 2 行で異なります。

レコード数を取得:

 SELECT COUNT(*) ...
 GROUP BY a, b, c
 HAVING ... 

実績:

 SELECT "rows"...
 GROUP BY a, b, c
 HAVING ... 
 ORDER BY var1, var2
 LIMIT var_start, var_end

私の質問:
これを 2 回実行する必要があるため、少なくとも同じストアド プロシージャを使用する方法はありますか = 注文/グループ化にデフォルト値を追加できます? ?

if文のようなもの

WHERE 1
AND IF( var_x = '', '.', var_x = some_value )

ご意見ありがとうございます。

4

3 に答える 3

1

sql_calc_found_rows を見ましたか?

select sql_calc_found_rows mytable.* ... 
于 2012-06-27T07:10:39.650 に答える
1

最初のクエリは間違っています。MySQL エンジンに実際に行を返してからカウントするように依頼するのではなく、MySQL に直接カウントするように依頼する必要があります。

SELECT COUNT(*)
FROM ...
GROUP BY a, b, c
HAVING ... 

同じ SQL ステートメントまたはストアド プロシージャでレコードカウントとレコード取得の両方を押し込もうとするのは、不必要な最適化です。

于 2012-06-27T07:12:06.763 に答える
1

必要な行数だけの場合は、 count(*) を使用して追加のパラメーターを使用しないでください。

SELECT count(a) as number_of_a, count(b) as number_of b ...
 GROUP BY a, b, c
 HAVING ... 
 ORDER BY var1, var2
 LIMIT var_start, var_end
于 2012-06-27T07:07:34.483 に答える