mysql ページング ストアド プロシージャの 4 つの例 この記事には、効率的なページング ストアド プロシージャと、エントリー レベルおよび一般的なストアド プロシージャのページング コードを含む、4 つの MySQL ページング ストアド プロシージャのサンプル コードがまとめられています。MySQL ページング ストアド プロシージャを学習している場合は、ぜひご覧ください。
4 つの mysql チュートリアルとページング ストアド プロシージャの例
この記事には、効率的なページング ストアド プロシージャと、エントリー レベルおよび一般的なストアド プロシージャのページング コードを含む、4 つの MySQL ページング ストアド プロシージャのサンプル コードがまとめられています。MySQL ページング ストアド プロシージャを学習している場合は、ぜひご覧ください。
mysql テスト バージョン: 5.0.41-community-nt
/*************************************************** * *
mysql ページネーション ストアド プロシージャ
呉建 2009-07-02
************************************************* * ***/
存在する場合はプロシージャを削除 pr_pager;
プロシージャ pr_pager を作成します(
p_table_name varchar(1024)、/*テーブル名*/
in p_fields varchar(1024), /*クエリフィールド*/
in p_page_size int, /*ページごとのレコード数*/
in p_page_now int, /*現在のページ*/
in p_order_string varchar(128), /*ソート条件 (order キーワードを含む、空でも可)*/
in p_where_string varchar(1024), /*where 条件 (where キーワードを含み、空にすることもできます)*/
out p_out_rows int int /*出力レコードの総数*/
)
決定的ではありません
SQLセキュリティ定義者
コメント「ページング ストアド プロシージャ」
始まります
/*変数を定義*/
m_begin_row int デフォルト 0 を宣言します;
m_limit_string char(64);
/*構成ステートメント*/
m_begin_row = (p_page_now - 1) * p_page_size; を設定します
set m_limit_string = concat(' limit ', m_begin_row, ', ', p_page_size);
set @count_string = concat('select count(*) into @rows_total from ', p_table_name, ' ', p_where_string);
set @main_string = concat('select ', p_fields, ' from ', p_table_name, ' ', p_where_string, ' ', p_order_string, m_limit_string);
/*前処理*/
@count_string から count_stmt を準備します;
count_stmt を実行;
deallocate prepare count_stmt;
p_out_rows = @rows_total; を設定します
@main_string から main_stmt を準備します;
main_stmt を実行します;
deallocate prepare main_stmt;
終わり
効率的なストアド プロシージャ ページング コード
ストアド プロシージャ ページングの基本原理: まず、見つかったレコード セット (入力検索条件 _whereclause および配置条件 _orderby をサポート) のキー フィールドを一時テーブルに一時的に保存し、次に実際のレコード セット出力を構築します。
プロシージャ`mysqltestuser_select_pageable`を作成します(
_whereclause varchar(2000), -- 検索条件
_orderby varchar(2000)、
_pagesize , int , -- ページあたりのレコード数
_pageindex int , -- 現在のページ番号
)
決定的ではありません
Sは、定義されていることになっていることを定義していることを定義しています
始まります
-- キーフィールドの一時テーブルを定義します
存在する場合はテーブルを削除 _temptable_keyid; -- 一時テーブルが存在する場合は削除します
一時テーブル _temptable_keyid を作成します
(
ユーザーID int
)type=ヒープ;
-- 動的 SQL を構築し、キーワード キーの ID セットを出力します
--検索条件
set @sql= concat(@sql, ' where ' ,_whereclause);
終了したら;
if (_orderby が null ではない) かつ (_orderby <> ' ') then
set @sql= concat( @sql , ' order by ' , _orderby);
終了したら;
-- ID レコードを一時テーブルに挿入する準備をします
-- キーID収集[終了]
-- 以下は出力です
始まります
- 「」
終わり
それ以外
始まります
~計算レコードの始点位置を補正する~
set @startpoint = ifnull((_pageindex-1)*_pagesize,0);
@sql = 'select a.* を設定します
内部結合 _temptable_keyid b
a.userid =b.userid ';
set @sql=concat(@sql, " 制限 ",@startpoint, " , ",_pagesize);
@sql から stmt を準備します。
stmt を実行します。
割り当て解除、準備、ステートメント;
終わり;
終了したら;
ドロップ テーブル _temptable_keyid;
終わり;
以下は mysqltestuser表の ddl:
テーブルの作成 `mysqltestuser` (
`userid` int(11) not null auto_increment,
`name` varchar(50) デフォルト null、
`chinesename` varchar(50) デフォルト null,
`registerdatetime` datetime デフォルト null、
`jf` 10 進数 (20,2) デフォルト null、
`説明` 長文、
主キー (`userid`)
) エンジン=innodb デフォルト charset=gb2312;
入力されたデータ:
insert into `mysqltestuser` (`userid`, `name`, `chinesename`, `registerdatetime`, `jf`, `description`) 値
(1, 'xuu1 ', 'www.aimeige.com.cn ', '2007-03-29 12:54:41 ',1.5, 'description1 ')、
(2, 'xuu2 ', 'www.bKjia.c0m ', '2007-03-29 12:54:41 ',2.5, 'description2 '),
存储过程调用测试:
-- メソッド原型 `mysqltestuser_select_pageable`(条件,排列顺序,每页记录数,第几页,否か统计データセット)
-- `mysqltestuser_select_pageable`(_whereclause ,_orderby ,_pagesize ,_pageindex , _docount) を呼び出します
-- 统计データ
call `mysqltestuser_select_pageable`(null, null, null, null, 1)
-- 输出データ、没条件制限、10条记录/页、第一页
call `mysqltestuser_select_pageable`(null, null, 10, 1,0)
-- 输出データ、条件制限、排列、 10条记录/页、第一页
call `mysqltestuser_select_pageable`( 'chinesename like ' '%飞3% ' ' ', 'userid asc ', 10, 1, 0)
一款mysql .netの方法
mysql + asp教程.net来写网站,是然mysql已经支持存储过程了,那么像分页这么常用的东西,当然必用存储过程啦!
ネットワーク上にはいくつかのものが存在しますが、すべてに利点があることがわかりました。それは、計算が行われているため、効率が良くない可能性がありますが、私たちも苦労せずに研究しました。直接: 也計算は自己学習 mysql の 1 つです。
プロシージャ p_pagelist を作成します
(
m_pageno int ,
m_perpagecnt int ,
m_column varchar(1000) 、
m_table varchar(1000) ,
m_condition varchar(1000),
m_orderby varchar(200) 、
out m_totalpagecnt int
)
始まります
@pagecnt = 1 を設定します。 -- 总记录数
set @limitstart = (m_pageno - 1)*m_perpagecnt;
set @limitend = m_perpagecnt;
set @sqlcnt = concat('select count(1) into @pagecnt from ',m_table); -- 这条语句很关键,总数值を得るために使用します
set @sql = concat('select ',m_column,' from ',m_table);
m_condition が null ではなく、m_condition <> の場合では
set @sql = concat(@sql,' where ',m_condition);
set @sqlcnt = concat(@sqlcnt,' where ',m_condition);
終了したら;
m_orderby が null ではなく、m_orderby <> の場合では
set @sql = concat(@sql,' order by ',m_orderby);
終了したら;
set @sql = concat(@sql, 'limit', @limitstart, ',', @limitend);
@sqlcnt から s_cnt を準備します;
s_cntを実行します;
割り当て解除 s_cnt を準備します;
set m_totalpagecnt = @pagecnt;
@sql からレコードを準備します;
レコードを実行;
レコードの割り当てを解除します;
終わり
mysql のユニバーサル ストアド プロシージャは、共有の精神で、mysql ページング クエリのこのユニバーサル ストアド プロシージャをすべての人に提供します。使用するデータベース チュートリアルがゲストブックであると仮定します。
ゲストブックを使用する;
区切り文字 $$
存在する場合はプロシージャを削除 prc_page_result $$
プロシージャ prc_page_result を作成 (
curpage int、
列内 varchar(500),
テーブル名 varchar(500) 内、
scondition varchar(500)、
order_field で varchar(100)、
asc_field int、
Primary_field varchar(100)、
ページサイズ int で
)
始まります
stemp varchar(1000) を宣言します;
ssql varchar(4000) を宣言します;
オーダー varchar(1000) を宣言します;
asc_field = 1 の場合
set order = concat(order by, order_field, desc);
set stemp = <(分を選択;
それ以外
set order = concat(order by, order_field, asc);
set stemp = >(最大値を選択;
終了したら
currpage = 1 の場合
状態が良好な場合 <>
set ssql = concat(select, columns, from, tablename, where);
set ssql = concat(ssql, scondition, order, limit?);
その他
set ssql = concat(select、columns、from、tablename、order、limit?);
終了の場合;
それ以外
状態が良好な場合 <>
set ssql = concat(select, columns, from, tablename);
set ssql = concat(ssql, where , scondition および , Primary_field, stemp);
set ssql = concat(ssql, (, Primary_field, ), from (select);
set ssql = concat(ssql, , Primary_field, from , tablename, order);
set ssql = concat(ssql, limit, (currpage-1)*pagesize, ) as tabtemp), order);
set ssql = concat(ssql, 制限?);
その他
set ssql = concat(select, columns, from, tablename);
set ssql = concat(ssql, where , Primary_field, stemp);
set ssql = concat(ssql, (, Primary_field, ), from (select);
set ssql = concat(ssql, , Primary_field, from , tablename, order);
set ssql = concat(ssql, limit, (currpage-1)*pagesize, ) as tabtemp), order);
set ssql = concat(ssql, 制限?);
終了の場合;
終了したら
@ipagesize = ページサイズを設定します;
set @squery = ssql;
@squery;からstmtを準備します
@ipagesize;
を使用してstmtを実行します
終わり;
$$
区切り文字;
データベース スクリプトとして保存し、次のコマンドでインポートできます:
mysql -u root -p
*/
?>