PDA

View Full Version : شمارش تعداد رکوردها



soroush.r70
دوشنبه 12 دی 1390, 16:13 عصر
من برای شمارش تعداد رکورد هام از این کد استفاده می کنم


$sql = 'SELECT * '
. ' FROM `tbl_works` ';

$res=mysql_query($sql);
$news_aff = mysql_affected_rows($res);

ولی وقتی که از ;()mysql_close استفاده میکنم این خطا رو می ده.


Warning: mysql_affected_rows(): supplied resource is not a valid MySQL-Link resource in H:\xampp\htdocs\me\soroushr70\index.php on line 35

لطفا منو راهنمایی کنین و بگین چطوری این خطا رو رفع کنم و تعداد رکورد هامو بگیرم ممنون.

MMSHFE
دوشنبه 12 دی 1390, 16:30 عصر
اولاً برای دستور SELECT تعداد رکوردهای بازگشتی با mysql_num_rows مشخص میشه و mysql_affected_rows در دستوراتی مثل UPDATE و DELETE و کلاً دستوراتی که باعث تغییر رکوردها میشن بکار میره و تعداد رکوردهایی رو که تحت تأثیر اون دستور تغییر کردن، مشخص میکنه.
ثانیاً این روش خیلی مناسب نیست. میتونید از این روش استفاده کنید:


$count = mysql_result(mysql_query('SELECT COUNT(*) AS `total` FROM `tbl_works`'), 0, 0);

موفق باشید.

ravand
دوشنبه 12 دی 1390, 21:20 عصر
ببخشيد آقاي شهركي
من براي شمارش ركوردهام از اين كد استفاده ميكنم اين روش درسته ؟

<?php
$servername="localhost";
$dbname="cms2";
$user="root";
$pass="";
$dblink=mysql_connect($servername,$user,$pass);
mysql_select_db($dbname,$dblink);
mysql_query("SET CHARACTER SET utf8",$dblink);
$dbresult=mysql_query("SELECT * FROM jadval",$dblink);
while($record=mysql_fetch_assoc($dbresult))
{
$id=$record['id'];
}
echo "$id";
mysql_close($dblink);
?>
نميدونم شايد هم منظور اين دوست گرامي هم چيز ديگه اي هست.

MMSHFE
سه شنبه 13 دی 1390, 09:56 صبح
این روش درسته ولی خیلی کند هست. همیشه سعی کنید تا جایی که میشه عملیاتی مثل شمارش، محاسبه معدل و... رو به خود MySQL بسپارین و خروجی لازم رو از اون استخراج کنید. مثلاً برای محاسبه معدل دانشجویان در یک ترم از جدول نمرات، میتونید دستوری مشابه زیر رو بکار ببرین:

SELECT `stu_id`, AVG(`grade`) AS `average` FROM `grades` WHERE (`term`='1' AND `year`='1390') GROUP BY `stu_id` ORDER BY `stu_id`

این روش سرعت اجرای اسکریپت رو در مواردی که تعداد رکوردها زیاد هست، به مراتب بیشتر میکنه چون در روش شما، باید همه رکوردها استخراج بشن و بعد، یکی یکی همه رو بررسی کنیم. برای مثال، کدی که شما گذاشتین، آخرین id رو توی متغیر id$ ذخیره میکنه. میتونستین همین کار رو با دستور زیر و بدون استفاده از حلقه while انجام بدین:


$id = mysql_result(mysql_query('SELECT `id` FROM `jadval` ORDER BY `id` DESC LIMIT 1'), 0, 0);

موفق باشید.