做一些數(shù)據(jù)庫查詢,不僅希望得到要查詢的結(jié)果,還希望方便地計(jì)算一下查詢結(jié)果中有多少條記錄。我通常的做法是:
創(chuàng)新互聯(lián)是專業(yè)的鳩江網(wǎng)站建設(shè)公司,鳩江接單;提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行鳩江網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
$q = "select * from $fromTable where $where limit $start,$pageSize";
$r = mysql_query($q);
$q = "select count(*) from $fromTable where $where";
$cnt = mysql_query($q);
當(dāng) 然可以用mysql_num_rows()或者mysql_affected_rows()來在第一次查詢后得到記錄數(shù)目,但是這兩個(gè)函數(shù)返回的都是查詢 后得到的結(jié)果的數(shù)目,是受limit語句的影響的。很多情況下,需要知道這條查詢語句在沒有l(wèi)imit的情況下結(jié)果總數(shù),比如分頁查詢。
mysql 中本身支持一種更好的方法來達(dá)到上面的效果,那就是使用SQL_CALC_FOUND_ROWS和FOUND_ROWS()函數(shù)。
mysql中要獲得存儲過程的返回值,可以增加一個(gè)out參數(shù),用來返回。
mysql中存儲過程的例子:
CREATE PROCEDURE addvoucher (
IN userid INT,
IN voucherid INT,
OUT result INT
)
BEGIN
SELECT
@endate_a := endate ,@batch_a := batch ,@c_count_a := c_count,
@isdead_a := isdead
FROM
t_voucher
WHERE
id = voucherid;
SET autocommit = 0;
IF EXISTS (
SELECT
*
FROM
t_user_voucher tuv,
t_voucher tv
WHERE
tv.id = tuv.voucherid
AND tv.batch =@batch_a
) THEN
SET result = 1;-- 已存在
SELECT
result;
ELSE
IF @c_count_a 0 THEN
IF (
TO_DAYS(@endate_a) - TO_DAYS(NOW())
) 0 THEN
IF @isdead_a = 1 THEN
INSERT INTO t_user_voucher (userid, voucherid, isdead)
VALUES
(userid, voucherid, 1);
UPDATE t_voucher SET c_count = c_count-1 where id = voucherid;
SET result = 0;-- 成功
END;
mysql_query()一般是用來查詢數(shù)據(jù)里面的數(shù)據(jù)。
如:
$username=$_POST["name"];
$sql="SELECT *FROM members where login_name = 'username'";
$result=mysql_query($sql);
以上程序是檢測數(shù)據(jù)庫中是否存在表單傳送過來的用戶名。
如果檢測成功,$result是返回?cái)?shù)據(jù)庫中的匹配的記錄,如果出錯(cuò)則$result為false。
需要注意的是,即使數(shù)據(jù)庫中不存在查詢的數(shù)據(jù),檢測也算成功,$result也不會是false.
所以,如果要檢測數(shù)據(jù)庫中是否有匹配記錄就用語句mqsql_fetch_array()來判斷。
$test=mqsql_fetch_array($result);
如果記錄為空則$test為false。這樣就達(dá)到了目的。