شنبه ۲۲ شهریور ۱۴۰۴

Saturday, September 13, 2025 GMT +3:30

توابع تجمیعی (Aggregate Functions) در MySQL

mysql-aggregate-functions

کار با پایگاه داده های MySQL به اجرای پرس و جوهای ساده و استخراج اطلاعات خام ردیف ها محدود نمی شود، معمولا در برنامه نویسی های پیچیده یا تحلیل کلی اطلاعات دیتابیس ها نیاز به انجام محاسبات بر روی گروهی از داده ها و کسب خلاصه نتیجه وجود دارد به فرض ممکن است نیاز به محاسبه میانگین یک سری از مقادیر عددی داشته باشیم یا بخواهیم بیشترین یا کمترین مقدار را از بین داده های عددی موجود استخراج کنیم، برای اینگونه موارد در اغلب سیستم های مدیریت پایگاه داده و برنامه های صفحه گستری که با داده ها سر و کار دارند (به فرض برنامه مایکروسافت اکسل) توابع از پیش تعریف شده ای تحت عنوان توابع تجمیعی (Aggregate Functions) وجود دارد که به کمک آنها می توانیم محسبات را بر روی گروهی از اطلاعات عددی انجام داده و نتیجه نهایی را استخراج کنیم، به جهت پرکاربرد بودن این توابع (شامل COUNT، MAX، MIN، SUM، AVG) در پرس و جوهای MySQL در ادامه آموزش های مقدماتی به این موضوع خواهیم پرداخت.

کاربرد توابع تجمیعی (Aggregate Functions)


داشتن دورنمای کلی و خلاصه ای از مقادیر عددی ردیف های جداول پایگاه داده به طور مثال جهت نمایش بر روی نمودارها و ارائه تجزیه تحلیل های آماری به خصوص در برنامه ها و پروژه هایی که با حجم انبوهی از اطلاعات سر و کار دارند از جمله دلایلی است که لزوم استفاده از توابع انجام محاسبات روی گروهی از اطلاعات را ایجاب می کنند، با کمک توابع تجمیعی (Aggregate Functions) می توانیم تعداد، بیشترین، کمترین، میانگین و مجموع مقادیر ردیف ها را در میان گروهی از اطلاعات محاسبه کرده و نتیجه را به شکل مقدار واحد استخراج کنیم، برای شروع آموزش این مبحث به پایگاه داده، جدول و نمونه اطلاعاتی به شرح زیر نیازمندیم.

ساخت دیتابیس، جدول و ورود نمونه اطلاعات


قبل از پرداختن موردی به توابع تجمیعی ابتدا با استفاده از برنامه phpMyAdmin یک دیتابیس با نام دلخواه (ترجیحا Collation به صورت utf8_persian_ci) و جدولی فرضی با نام tbl_cars با نمونه ردیف های زیر در آن ایجاد می کنیم:
id  =>  int(11) AUTO_INCREMENT
name  =>  varchar(255)
model  =>  varchar(255)
color  =>  varchar(255)
price  =>  int(11)
هم به صورت دستی و هم با اجرای دستورات زیر در قسمت SQL برنامه phpMyAdmin می توانیم جدول بالا را ایجاد کنیم:
CREATE TABLE IF NOT EXISTS `tbl_cars` (
  `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_persian_ci DEFAULT NULL,
  `model` varchar(255) COLLATE utf8_persian_ci DEFAULT NULL,
  `color` varchar(255) COLLATE utf8_persian_ci DEFAULT NULL,  
  `price` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `name` (`name`),
  KEY `model` (`model`),
  KEY `color` (`color`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci
نکته مهم: با توجه به اینکه ممکن است در آینده حروف زبان فارسی را در دیتابیس ذخیره یا از آن دریافت کنیم توصیه می شود Collation دیتابیس و جدول را در برنامه phpMyAdmin به صورت utf8_persian_ci تنظیم کنیم.
برای اینکه نمونه اطلاعاتی جهت تست و بررسی در اختیار داشته باشیم دستورات زیر را در قسمت SQL برنامه phpMyAdmin برای جدول tbl_cars اجرا می کنیم:
INSERT INTO `tbl_cars` (`id`, `name`, `model`, `color`, `price`) VALUES
(1, 'Peugeot', 1399, "black", 1500000),
(2, 'Pride', 1398, "white", 1000000),
(3, 'Nissan', 1400, "blue", 1200000),
(4, 'Tiba', 1400, "white", 1100000),
(5, 'Mazda', 1395, "silver", 1300000),
(6, 'Dena', 1399, "black", 1400000);
یا اینکه می توانیم کدهای زیر را در یک فایل PHP درج و پس از اعمال تنظیمات اتصال در متغیر conn از طریق مرورگر فراخوانی کنیم.
برنامه نویسی رویه ای (Procedural):
<?php
$array = array(
    'name' => array('Peugeot', 'Pride', 'Nissan', 'Tiba', 'Mazda', 'Dena'),
    'model' => array(1399, 1398, 1400, 1400, 1395, 1399),
    'color' => array('black', 'white', 'blue', 'white', 'silver', 'black'),
    'price' => array(1500000, 1000000, 1200000, 1100000, 1300000, 1400000)
);
$count = count($array['name']);
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else {
    //ذخیره نمونه اطلاعات در جدول
    for($i = 0; $i < $count; $i++){
        $sql = "INSERT INTO tbl_cars(name, model, color, price) VALUES('" . $array['name'][$i] . "', '" . $array['model'][$i] . "', '" . $array['color'][$i] . "', '" . $array['price'][$i] . "')";
        $query = mysqli_query($conn, $sql);
         
        if(!$query) {
            echo "Inserting Into Table tbl_cars: Error! " . mysqli_error($conn);
            break;
        } else {
            echo "tbl_cars: Row " . ($i + 1) . " Inserted!<br>";
        }
    }
}
//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):
<?php
$array = array(
    'name' => array('Peugeot', 'Pride', 'Nissan', 'Tiba', 'Mazda', 'Dena'),
    'model' => array(1399, 1398, 1400, 1400, 1395, 1399),
    'color' => array('black', 'white', 'blue', 'white', 'silver', 'black'),
    'price' => array(1500000, 1000000, 1200000, 1100000, 1300000, 1400000)
);
$count = count($array['name']);
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . $conn->errno . ' - ' . $conn->error;
    exit;
} else {
    //ذخیره نمونه اطلاعات در جدول
    for($i = 0; $i < $count; $i++){
        $sql = "INSERT INTO tbl_cars(name, model, color, price) VALUES('" . $array['name'][$i] . "', '" . $array['model'][$i] . "', '" . $array['color'][$i] . "', '" . $array['price'][$i] . "')";
        $query = $conn->query($sql);
         
        if(!$query) {
            echo "Inserting Into Table tbl_cars: Error! " . $conn->error;
            break;
        } else {
            echo "tbl_cars: Row " . ($i + 1) . " Inserted!<br>";
        }
    }
}
//پایان اتصال
$conn->close();
?>

تابع تجمیعی COUNT، شمارش تعداد ردیف ها


یکی از پرکاربردترین توابع تجمیعی در پرس و جوهای MySQL تابع COUNT است که برای شمارش تعداد ردیف ها در یکی  از شرایط زیر استفاده می شود:
- استفاده از COUNT به همراه علامت *، در این حالت تمام ردیف های انتخاب شده در پرس و جوی SELECT (شامل مقادیر NULL و تکراری) شمارش می شوند، به فرض:
SELECT COUNT(*) FROM tbl_cars WHERE model > 1350
- استفاده از COUNT و شمارش ستون خاص به طور مثال id، در این حالت شمارش شامل مقادیر NULL برای ستون تعیین شده نمی شود به فرض:
SELECT COUNT(id) FROM tbl_cars WHERE model > 1350
نکته: نمونه اطلاعاتی که قبلا درج کردیم در هیچ ردیفی شامل مقدار NULL نمی شوند و پرس و جوهای بالا نتیجه یکسان خواهند داشت اما در صورتی که به هر دلیل مقدار یک یا چند ردیف NULL باشد نتیجه متفاوت خواهد بود.
- استفاده از COUNT و DISTINCT برای به دست آوردن تعداد مقادیر غیرتکراری (متفاوت) در پرس و جو، به فرض:
SELECT COUNT(DISTINCT color) FROM tbl_cars WHERE model > 1350
برای تست و بررسی تابع COUNT کافی است پرس و جوهای بالا را در قسمت SQL برنامه phpMyAdmin اجرا یا کد زیر را در یک فایل PHP درج و پس از اعمال تنظیمات اتصال در متغیر conn از طریق مرورگر فراخوانی کنیم.
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else{    
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $query = mysqli_query($conn, $sql);
    
    //اانتخاب اطلاعات از جدول و ستون ها
    $sql = "SELECT name, COUNT(id) FROM tbl_cars WHERE name != ''";
    $query = mysqli_query($conn, $sql);
    
    if(!$query){
        echo "Selecting From Table tbl_cars: Error! " . mysqli_error($conn) . '<br>';
    } else{
        //تعداد ردیف های انتخاب شده
        $count = mysqli_num_rows($query);
        $loop = 1;
        
        //پردازش و خروجی ردیف های اطلاعات
        if($count > 0){
            echo '<div style="direction: ltr; border: 1px solid #999;">';
            
            echo 'Row Count: ' . $count . '<br><br>';
            while($row = mysqli_fetch_array($query)){
                echo 'Row ' . $loop . ' => ' .
                'Name: ' . $row['name'] . ' - ' .
                'Count: ' . $row['COUNT(id)'] . '<br><br>';
                
                $loop++;
            }
            
            echo '</div>';
        } else{
            echo "No Rows Found in Table tbl_cars!";
        }
    }
}
//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):
<?php
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . $conn->errno . ' - ' . $conn->error;
    exit;
} else {
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $conn->query($sql);
    
    //اانتخاب اطلاعات از جدول و ستون ها
    $sql = "SELECT name, COUNT(id) FROM tbl_cars WHERE name != ''";
    $query = $conn->query($sql);
    
    //دریافت اطلاعات از جدول
    if(!$query) {
        echo "Selecting From Table tbl_cars: Error! " . $conn->error . '<br>';
    } else {
        //تعداد ردیف های انتخاب شده
        $count = $query->num_rows;
        $loop = 1;
        
        //پردازش و خروجی ردیف های اطلاعات
        if($count > 0){
            echo '<div style="direction: ltr; border: 1px solid #999;">';
            
            echo 'Row Count: ' . $count . '<br><br>';
            while($row = $query->fetch_array()){
                echo 'Row ' . $loop . ' => ' .
                'Name: ' . $row['name'] . ' - ' .
                'Count: ' . $row['COUNT(id)'] . '<br><br>';
                
                $loop++;
            }
            
            echo '</div>';
        } else{
            echo "No Rows Found in Table tbl_cars!";
        }
    }
}
//پایان اتصال
$conn->close();
?>
خروجی نمونه دستورات بالا به صورت زیر خواهد بود:
Row Count: 1
Row 1 => Name: Peugeot - Count: 6
نکته جالب اینکه زمانی که در پرس و جو از COUNT استفاده می کنیم تنها یک ردیف اطلاعات در خروجی قابل دریافت است اما شمارش ردیف id مقادیر 6 را برمی گرداند، این حالت به دلیل تجمیعی بودن تابع COUNT است که به نوعی ابتدا به صورت پیش فرض GROUP BY را بر روی ردیف ها اعمال می کند، اگر به هر دلیل همزمان نیاز به شمارش کل و دریافت مقادیر ردیف ها در یک پرس و جو داشتیم می توانیم قسمت SQL را به شکل نمونه زیر بازنویسی کنیم:
SELECT name, (SELECT COUNT(id) FROM tbl_cars WHERE name != '') AS count_id FROM tbl_cars WHERE name != ''
همچنین در قسمت دریافت و چاپ نتایج در حلقه while به جای حالت بالا برای نام ستون از کلید count_id در آرایه row استفاده می کنیم:
while($row = mysqli_fetch_array($query)){
    echo 'Row ' . $loop . ' => ' .
    'Name: ' . $row['name'] . ' - ' .
    'Count: ' . $row['count_id'] . '<br><br>';
    
    $loop++;
}
که خروج به شکل زیر خواهد بود:
Row Count: 6
Row 1 => Name: Dena - Count: 6
Row 2 => Name: Mazda - Count: 6
Row 3 => Name: Nissan - Count: 6
Row 4 => Name: Peugeot - Count: 6
Row 5 => Name: Pride - Count: 6
Row 6 => Name: Tiba - Count: 6
به این صورت علاوه بر شمارش تعداد کل ردیف های مد نظر در قسمت COUNT، مقادیر سایر ردیف ها نیز قابل دسترسی است.

تابع تجمیعی MIN، انتخاب کمترین مقدار


با تابع MIN می توانیم کمترین مقدار را از بین نتایج پرس و جو استخراج کنیم، در استفاده از تابع تجمیعی MIN باید ستون مورد نظر را تعیین کنیم، نوع ستون باید عددی باشد به فرض:
SELECT MIN(price) FROM tbl_cars WHERE id != 0
برای تست و بررسی تابع MIN کافی است پرس و جوی بالا را در قسمت SQL برنامه phpMyAdmin اجرا یا کد زیر را در یک فایل PHP درج و پس از اعمال تنظیمات اتصال در متغیر conn از طریق مرورگر فراخوانی کنیم.
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else{    
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $query = mysqli_query($conn, $sql);
    
    //اانتخاب اطلاعات از جدول و ستون ها
    $sql = "SELECT MIN(price) FROM tbl_cars WHERE id != 0";
    $query = mysqli_query($conn, $sql);
    
    if(!$query){
        echo "Selecting From Table tbl_cars: Error! " . mysqli_error($conn) . '<br>';
    } else{
        //تعداد ردیف های انتخاب شده
        $count = mysqli_num_rows($query);
        $loop = 1;
        
        //پردازش و خروجی ردیف های اطلاعات
        if($count > 0){
            echo '<div style="direction: ltr; border: 1px solid #999;">';
            
            echo 'Row Count: ' . $count . '<br><br>';
            while($row = mysqli_fetch_array($query)){
                echo 'Row ' . $loop . ' => ' .
                'Min: ' . $row['MIN(price)'] . '<br><br>';
                
                $loop++;
            }
            
            echo '</div>';
        } else{
            echo "No Rows Found in Table tbl_cars!";
        }
    }
}
//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):
<?php
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . $conn->errno . ' - ' . $conn->error;
    exit;
} else {
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $conn->query($sql);
    
    //اانتخاب اطلاعات از جدول و ستون ها
    $sql = "SELECT MIN(price) FROM tbl_cars WHERE id != 0";
    $query = $conn->query($sql);
    
    //دریافت اطلاعات از جدول
    if(!$query) {
        echo "Selecting From Table tbl_cars: Error! " . $conn->error . '<br>';
    } else {
        //تعداد ردیف های انتخاب شده
        $count = $query->num_rows;
        $loop = 1;
        
        //پردازش و خروجی ردیف های اطلاعات
        if($count > 0){
            echo '<div style="direction: ltr; border: 1px solid #999;">';
            
            echo 'Row Count: ' . $count . '<br><br>';
            while($row = $query->fetch_array()){
                echo 'Row ' . $loop . ' => ' .
                'Min: ' . $row['MIN(price)'] . '<br><br>';
                
                $loop++;
            }
            
            echo '</div>';
        } else{
            echo "No Rows Found in Table tbl_cars!";
        }
    }
}
//پایان اتصال
$conn->close();
?>
خروجی نمونه دستورات بالا به صورت زیر خواهد بود:
Row Count: 1
Row 1 => Min: 1000000
در صورتی که بخواهیم به همراه ستون کمترین قیمت (price) ستون name متناظر را هم استخراج کنیم باید از GROUP BY و ORDER BY به شکل پرس و جوهای نمونه زیر در کنار تابع MIN استفاده کنیم:
SELECT name, MIN(price) FROM tbl_cars WHERE id != 0 GROUP BY price ORDER BY price ASC

SELECT name, MIN(price) FROM tbl_cars WHERE id != 0 GROUP BY price  ORDER BY price ASC LIMIT 1
در صورت استفاده از LIMIT، نتایج محدود به تعداد تعیین شده بر اساس کمترین مقدار قیمت خواهد بود.

تابع تجمیعی MAX، انتخاب بیشترین مقدار


با تابع MAX می توانیم بیشترین مقدار را از بین نتایج پرس و جو استخراج کنیم، در استفاده از تابع تجمیعی MAX مشابه MIN باید ستون مورد نظر را تعیین کنیم، نوع ستون باید عددی باشد به فرض:
SELECT MAX(price) FROM tbl_cars WHERE id != 0
برای تست و بررسی تابع MAX کافی است پرس و جوی بالا را در قسمت SQL برنامه phpMyAdmin اجرا یا کد زیر را در یک فایل PHP درج و پس از اعمال تنظیمات اتصال در متغیر conn از طریق مرورگر فراخوانی کنیم.
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else{    
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $query = mysqli_query($conn, $sql);
    
    //اانتخاب اطلاعات از جدول و ستون ها
    $sql = "SELECT MAX(price) FROM tbl_cars WHERE id != 0";
    $query = mysqli_query($conn, $sql);
    
    if(!$query){
        echo "Selecting From Table tbl_cars: Error! " . mysqli_error($conn) . '<br>';
    } else{
        //تعداد ردیف های انتخاب شده
        $count = mysqli_num_rows($query);
        $loop = 1;
        
        //پردازش و خروجی ردیف های اطلاعات
        if($count > 0){
            echo '<div style="direction: ltr; border: 1px solid #999;">';
            
            echo 'Row Count: ' . $count . '<br><br>';
            while($row = mysqli_fetch_array($query)){
                echo 'Row ' . $loop . ' => ' .
                'Max: ' . $row['MAX(price)'] . '<br><br>';
                
                $loop++;
            }
            
            echo '</div>';
        } else{
            echo "No Rows Found in Table tbl_cars!";
        }
    }
}
//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):
<?php
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . $conn->errno . ' - ' . $conn->error;
    exit;
} else {
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $conn->query($sql);
    
    //اانتخاب اطلاعات از جدول و ستون ها
    $sql = "SELECT MAX(price) FROM tbl_cars WHERE id != 0";
    $query = $conn->query($sql);
    
    //دریافت اطلاعات از جدول
    if(!$query) {
        echo "Selecting From Table tbl_cars: Error! " . $conn->error . '<br>';
    } else {
        //تعداد ردیف های انتخاب شده
        $count = $query->num_rows;
        $loop = 1;
        
        //پردازش و خروجی ردیف های اطلاعات
        if($count > 0){
            echo '<div style="direction: ltr; border: 1px solid #999;">';
            
            echo 'Row Count: ' . $count . '<br><br>';
            while($row = $query->fetch_array()){
                echo 'Row ' . $loop . ' => ' .
                'Max: ' . $row['MAX(price)'] . '<br><br>';
                
                $loop++;
            }
            
            echo '</div>';
        } else{
            echo "No Rows Found in Table tbl_cars!";
        }
    }
}
//پایان اتصال
$conn->close();
?>
خروجی نمونه دستورات بالا به صورت زیر خواهد بود:
Row Count: 1
Row 1 => Max: 1500000
در صورتی که بخواهیم به همراه ستون بیشترین قیمت (price) ستون name متناظر را هم استخراج کنیم باید از GROUP BY و ORDER BY به شکل پرس و جوهای نمونه زیر در کنار تابع MAX استفاده کنیم:
SELECT name, MAX(price) FROM tbl_cars WHERE id != 0 GROUP BY price ORDER BY price DESC

SELECT name, MAX(price) FROM tbl_cars WHERE id != 0 GROUP BY price ORDER BY price DESC LIMIT 1
در صورت استفاده از LIMIT، نتایج محدود به تعداد تعیین شده بر اساس بیشترین مقدار قیمت خواهد بود.

تابع تجمیعی AVG، میانگین مقادیر ردیف ها


در کنار توابع MIN و MAX که برای استخراج کمترین و بیشترین مقدار از نتایج پرس و جو به کار می روند تابع دیگری تحت عنوان AVG (برگرفته از عبارت Average) برای محاسبه میانگین مقادیر ردیف های پرس و جو کاربرد دارد، در استفاده از تابع تجمیعی AVG باید ستون مورد نظر را تعیین کنیم، نوع ستون باید عددی باشد به فرض:
SELECT AVG(price) FROM tbl_cars WHERE id != 0
برای تست و بررسی تابع AVG کافی است پرس و جوی بالا را در قسمت SQL برنامه phpMyAdmin اجرا یا کد زیر را در یک فایل PHP درج و پس از اعمال تنظیمات اتصال در متغیر conn از طریق مرورگر فراخوانی کنیم.
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else{    
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $query = mysqli_query($conn, $sql);
    
    //اانتخاب اطلاعات از جدول و ستون ها
    $sql = "SELECT AVG(price) FROM tbl_cars WHERE id != 0";
    $query = mysqli_query($conn, $sql);
    
    if(!$query){
        echo "Selecting From Table tbl_cars: Error! " . mysqli_error($conn) . '<br>';
    } else{
        //تعداد ردیف های انتخاب شده
        $count = mysqli_num_rows($query);
        $loop = 1;
        
        //پردازش و خروجی ردیف های اطلاعات
        if($count > 0){
            echo '<div style="direction: ltr; border: 1px solid #999;">';
            
            echo 'Row Count: ' . $count . '<br><br>';
            while($row = mysqli_fetch_array($query)){
                echo 'Row ' . $loop . ' => ' .
                'Average: ' . $row['AVG(price)'] . '<br><br>';
                
                $loop++;
            }
            
            echo '</div>';
        } else{
            echo "No Rows Found in Table tbl_cars!";
        }
    }
}
//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):
<?php
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . $conn->errno . ' - ' . $conn->error;
    exit;
} else {
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $conn->query($sql);
    
    //اانتخاب اطلاعات از جدول و ستون ها
    $sql = "SELECT AVG(price) FROM tbl_cars WHERE id != 0";
    $query = $conn->query($sql);
    
    //دریافت اطلاعات از جدول
    if(!$query) {
        echo "Selecting From Table tbl_cars: Error! " . $conn->error . '<br>';
    } else {
        //تعداد ردیف های انتخاب شده
        $count = $query->num_rows;
        $loop = 1;
        
        //پردازش و خروجی ردیف های اطلاعات
        if($count > 0){
            echo '<div style="direction: ltr; border: 1px solid #999;">';
            
            echo 'Row Count: ' . $count . '<br><br>';
            while($row = $query->fetch_array()){
                echo 'Row ' . $loop . ' => ' .
                'Average: ' . $row['AVG(price)'] . '<br><br>';
                
                $loop++;
            }
            
            echo '</div>';
        } else{
            echo "No Rows Found in Table tbl_cars!";
        }
    }
}
//پایان اتصال
$conn->close();
?>
خروجی نمونه دستورات بالا به صورت زیر خواهد بود:
Row Count: 1
Row 1 => Average: 1250000.0000
مشابه آنچه در مورد تابع COUNT و شمارش ردیف ها گفتیم در اینجا هم اگر بخواهیم به همراه میانگین عددی مقادیر، نام سایر ردیف ها را در نتیجه پرس و جو داشته باشیم باید از نمونه دستور SQL مشابه زیر استفاده کنیم:
SELECT name, (SELECT AVG(price) FROM tbl_cars WHERE name != '') AS average_price FROM tbl_cars WHERE name != ''
در قسمت دریافت و چاپ نتایج در حلقه while هم به جای حالت بالا از کلید average_price برای آرایه row استفاده می کنیم:
while($row = mysqli_fetch_array($query)){
    echo 'Row ' . $loop . ' => ' .
    'Name: ' . $row['name'] . ' - ' .
    'Averag: ' . $row['average_price'] . '<br><br>';
    
    $loop++;
}
که خروج به شکل زیر خواهد بود:
Row Count: 6
Row 1 => Name: Dena - Averag: 1250000.0000
Row 2 => Name: Mazda - Averag: 1250000.0000
Row 3 => Name: Nissan - Averag: 1250000.0000
Row 4 => Name: Peugeot - Averag: 1250000.0000
Row 5 => Name: Pride - Averag: 1250000.0000
Row 6 => Name: Tiba - Averag: 1250000.0000
به این صورت علاوه بر محاسبه میانگین عددی مقدار ردیف ها در قسمت AVG، مقادیر سایر ردیف ها نیز قابل دسترسی است.

تابع تجمیعی SUM، مجموع مقادیر ردیف ها


برای محاسبه مجموع مقادیر ردیف ها در پرس و جوهای MySQL تابع تجمیعی SUM کاربرد دارد، در استفاده از تابع تجمیعی SUM باید ستون مورد نظر را تعیین کنیم، نوع ستون باید عددی باشد به فرض:
SELECT SUM(price) FROM tbl_cars WHERE id != 0
برای تست و بررسی تابع SUM کافی است پرس و جوی بالا را در قسمت SQL برنامه phpMyAdmin اجرا یا کد زیر را در یک فایل PHP درج و پس از اعمال تنظیمات اتصال در متغیر conn از طریق مرورگر فراخوانی کنیم.
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else{    
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $query = mysqli_query($conn, $sql);
    
    //اانتخاب اطلاعات از جدول و ستون ها
    $sql = "SELECT SUM(price) FROM tbl_cars WHERE id != 0";
    $query = mysqli_query($conn, $sql);
    
    if(!$query){
        echo "Selecting From Table tbl_cars: Error! " . mysqli_error($conn) . '<br>';
    } else{
        //تعداد ردیف های انتخاب شده
        $count = mysqli_num_rows($query);
        $loop = 1;
        
        //پردازش و خروجی ردیف های اطلاعات
        if($count > 0){
            echo '<div style="direction: ltr; border: 1px solid #999;">';
            
            echo 'Row Count: ' . $count . '<br><br>';
            while($row = mysqli_fetch_array($query)){
                echo 'Row ' . $loop . ' => ' .
                'Sum: ' . $row['SUM(price)'] . '<br><br>';
                
                $loop++;
            }
            
            echo '</div>';
        } else{
            echo "No Rows Found in Table tbl_cars!";
        }
    }
}
//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):
<?php
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password", "dbname");
if(!$conn){
    echo "PHP & MySQL Connection: Error! " . $conn->errno . ' - ' . $conn->error;
    exit;
} else {
    //سازگاری با حروف فارسی
    $sql = "SET NAMES 'utf8'";
    $conn->query($sql);
    
    //اانتخاب اطلاعات از جدول و ستون ها
    $sql = "SELECT SUM(price) FROM tbl_cars WHERE id != 0";
    $query = $conn->query($sql);
    
    //دریافت اطلاعات از جدول
    if(!$query) {
        echo "Selecting From Table tbl_cars: Error! " . $conn->error . '<br>';
    } else {
        //تعداد ردیف های انتخاب شده
        $count = $query->num_rows;
        $loop = 1;
        
        //پردازش و خروجی ردیف های اطلاعات
        if($count > 0){
            echo '<div style="direction: ltr; border: 1px solid #999;">';
            
            echo 'Row Count: ' . $count . '<br><br>';
            while($row = $query->fetch_array()){
                echo 'Row ' . $loop . ' => ' .
                'Sum: ' . $row['SUM(price)'] . '<br><br>';
                
                $loop++;
            }
            
            echo '</div>';
        } else{
            echo "No Rows Found in Table tbl_cars!";
        }
    }
}
//پایان اتصال
$conn->close();
?>
خروجی نمونه دستورات بالا به صورت زیر خواهد بود:
Row Count: 1
Row 1 => Sum: 7500000
مشابه آنچه در مورد تابع COUNT و AVG گفتیم در اینجا هم اگر بخواهیم به همراه مجموع مقادیر نام سایر ردیف ها را در نتیجه پرس و جو داشته باشیم باید از نمونه دستور SQL مشابه زیر استفاده کنیم:
SELECT name, (SELECT SUM(price) FROM tbl_cars WHERE name != '') AS sum_price FROM tbl_cars WHERE name != ''
در قسمت دریافت و چاپ نتایج در حلقه while هم به جای حالت بالا از کلید sum_price برای آرایه row استفاده می کنیم:
while($row = mysqli_fetch_array($query)){
    echo 'Row ' . $loop . ' => ' .
    'Name: ' . $row['name'] . ' - ' .
    'Sum: ' . $row['sum_price'] . '<br><br>';
    
    $loop++;
}
که خروج به شکل زیر خواهد بود:
Row Count: 6
Row 1 => Name: Dena - Sum: 7500000
Row 2 => Name: Mazda - Sum: 7500000
Row 3 => Name: Nissan - Sum: 7500000
Row 4 => Name: Peugeot - Sum: 7500000
Row 5 => Name: Pride - Sum: 7500000
Row 6 => Name: Tiba - Sum: 7500000
به این صورت علاوه بر محاسبه مجموع مقدار ردیف ها در قسمت SUM، مقادیر سایر ردیف ها نیز قابل دسترسی است.

ترکیب توابع تجمیعی با HAVING و DISTINCT


در آموزش گذشته در خصوص محدودسازی، گروه بندی و مرتب سازی نتایج در MySQL صحبت کردیم و اشاره شد که دستورات HAVING و DISTINCT را می توانیم با توابع تجمیعی ترکیب و پرس و جوهای توسعه یافته تری بنویسیم، از این رو در انتهای این مطلب چند نمونه پرس و جو از نحوه ترکیب توابع تجمیعی با HAVING و DISTINCT را جهت آشنایی بیشتر با هم بررسی می کنیم، برای تست پرس و جوها کافی است در قسمت sql برنامه phpMyAdmin دستورات زیر را مورد به مورد اجرا کنیم:
- استفاده از تابع COUNT و HAVING
نمونه پرس و جو:
SELECT color, (SELECT COUNT(id) FROM tbl_cars WHERE name != '') AS count_id FROM tbl_cars WHERE model > 1350 GROUP BY name HAVING color = 'white'
خروجی:
color     count_id     
white        6
white        6
- استفاده از تابع COUNT و DISTINCT
نمونه پرس و جو:
SELECT COUNT(DISTINCT color) FROM tbl_cars WHERE model > 1350
خروجی:
4
- استفاده از تابع MIN و HAVING
نمونه پرس و جو:
SELECT name, MIN(price) FROM tbl_cars WHERE id != 0 GROUP BY price HAVING name != 'Tiba' ORDER BY price ASC
خروجی:
 name    MIN(price)     
Pride     1000000
Nissan    1200000
Mazda     1300000
Dena      1400000
Peugeot   1500000
- استفاده از تابع MIN و DISTINCT
نمونه پرس و جو:
SELECT DISTINCT color, MIN(price) FROM tbl_cars WHERE id != 0 GROUP BY price ORDER BY price ASC
خروجی:
 color   MIN(price)     
white     1000000
white     1100000
blue      1200000
silver    1300000
black     1400000
black     1500000
زمانی که دو یا چند ستون بعد از دستور DISTINCT تعیین می شود باید مقادیر تکراری در هر دو ستون و دو ردیف وجود داشته باشد تا یکی از آنها حذف شود، در نمونه اطلاعات جدول tbl_cars تنها ستون رنگ (color) دارای مقادیر تکراری است و قیمت (price) متفاوت است لذا حذف انجام نمی شود.
- استفاده از تابع MAX و HAVING
نمونه پرس و جو:
SELECT name, MAX(price) FROM tbl_cars WHERE id != 0 GROUP BY price HAVING name != 'Tiba' ORDER BY price DESC
خروجی:
 name     MAX(price)     
Peugeot    1500000
Dena       1400000
Mazda      1300000
Nissan     1200000
Pride      1000000
- استفاده از تابع MAX و DISTINCT
نمونه پرس و جو:
SELECT DISTINCT color, MAX(price) FROM tbl_cars WHERE id != 0 GROUP BY price ORDER BY price DESC
خروجی:
 color     MAX(price)     
black       1500000
black       1400000
silver      1300000
blue        1200000
white       1100000
white       1000000
- استفاده از تابع AVG و HAVING
نمونه پرس و جو:
SELECT color, (SELECT AVG(price) FROM tbl_cars WHERE name != '') AS average_price FROM tbl_cars WHERE name != '' GROUP BY name HAVING color = 'black'
خروجی:
 color     average_price     
black      1250000.0000
black      1250000.0000
- استفاده از تابع AVG و DISTINCT
نمونه پرس و جو:
SELECT AVG(DISTINCT price) FROM tbl_cars WHERE model > 1350
خروجی:
AVG(DISTINCT price)     
1250000.0000
در این مثال هم چون هیچ قیمت (price) تکراری نداریم در محاسبه میانگین هیچ کدام از ردیف ها حذف نمی شود.
- استفاده از تابع SUM و HAVING
نمونه پرس و جو:
SELECT color, (SELECT SUM(price) FROM tbl_cars WHERE name != '') AS sum_price FROM tbl_cars WHERE model > 1350 GROUP BY name HAVING color != 'blue'
خروجی:
 color     sum_price     
black       7500000
silver      7500000
black       7500000
white       7500000
white       7500000
- استفاده از تابع SUM و DISTINCT
نمونه پرس و جو:
SELECT SUM(DISTINCT price) FROM tbl_cars WHERE model > 1350
خروجی:
SUM(DISTINCT price)     
7500000
برای تست و بررسی بیشتر می توانیم قیمت ها را در ستون price به صورت تکراری تعیین و مجددا پرس و جو را اجرا کنیم.
دسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
به روز رسانی ردیف ها در MySQL با UPDATE
محدودسازی، گروه بندی و مرتب سازی نتایج در MySQL
استفاده از WHERE در پرس و جوی MySQL
حذف مقادیر از MySQL با دستور DELETE
آموزش MySQL، سیستم مدیریت پایگاه داده
دیدگاه
more ۲۱ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
کیوان
۱۷:۰۷ ۱۳۹۹/۰۱/۲۶
چطور میشه مبلغ هزینه ها تا هر ردیف در ردیف جدید نشان دهد بطور مثال
ردیف هزینه       ردیف جمع 
500 500
200 700
100 800
دیتابیس sqlite
ممنون
برای محاسبه و دریافت مجموع مقادیر ردیف های یک ستون در ستون جدید به صورت توالی باید یک متغیر با مقدار صفر تعریف و به شکل نمونه زیر پرس و جو را بنویسید:
SET @CumulativeSum := 0;
SELECT col_1, (@CumulativeSum := @CumulativeSum + col_1) AS total FROM `tbl` WHERE 1
البته این پرس و جو در MySQL تست شده اما برای SQLite هم باید به همین روال باشد.
اسماعیل
۲۱:۴۸ ۱۳۹۷/۰۸/۱۴
دوستان سلام
من یه سوال دیتابیستی داشتم لطفا کمکم کنید با تشکر
یه جدول بانک اطلاعاتی دارم میخوام یه شخصی را به قید قرعه انتخاب کنم مثلا قبلا همه افراد ثبت نام کردند امتیاز هریک هم در ابتدا صفر است وقتی قرعه کشی می کنم مثلا از ده نفر 4 نفر را انتخاب می کنم به صورت رندم و هریک امتیاز می گیرند و از لیست قرعه کنار میرن و در بار دوم برای یه پرونده دیگر میخوام قرعه کشی کنم میام ابتدا چک می کنم در کل جدول افرادی که قرار است انتخاب شوند مثلا هریک یک امتیاز دارند بعضی ها هم دو امتیاز میخوام سیستم عدالت توشون برقرار باشه
مثلا
اقای علی محمدی با امتیاز 1 و رضا حمیدی با امتیاز 1 و مجید مجیدی با امتیاز 2 و رحیمی رحیمی با امتیاز 2
کوئری میخوام بنویسم که بیاد ابتدا اونایی که امتیاز شون از همه کمتر را از لیست انتخاب کند و بین اونا قرعه کشی کند و از قرعه کنار برن
ارتباط جداول و نحوه کوئریش چجوری میشه تشکر
سوالتان کلی است و پاسخ کوتاهی ندارد، با توجه به توضیحات می توانید به چند روش این کار را انجام دهید، به طور مثال در گام اول یک جدول امتیازات داشته باشید که ستون های نام کاربر، امتیاز، وضعیت شرکت در قرعه کشی و... داشته باشد، قاعدتا باید یک جدول مختص اطلاعات کاربران نیز داشته باشید، در کدهای برنامه کلاس یا تابعی بنویسید که بحث امتیازدهی اولیه را انجام دهد (اجرای پرس و جوی UPDATE در MySQL)، یک کلاس یا تابع نیز بنویسید و یک متغیر با مقدار اولیه 1 تعریف کنید تا در حلقه while در پرس و جو به صورت داینامیک در قسمت WHERE جایگزین شده و در هر دور کاربرانی که امتیاز مشترکی دارند SELECT شوند و متد قرعه کشی روی آنها اعمال و نتیجه به صورت آرایه نگهداری شود، در انتهای حلقه مقدار متغیر را یک واحد افزایش دهید و در دور بعدی مقدار جدید را در پرس و جو جایگزین کرده و آرایه نتایج را با اطلاعات جدید به روز کنید و همین روال تا دور آخر، ملاحظه می کنید که هر قسمت باید به صورت جداگانه کدنویسی و متد یا تابع تعریف شود.
احسان
۱۲:۰۹ ۱۳۹۶/۱۱/۲۵
با دستور بالا فکر کنم برای هر خونه از یک ستون ، باید یکی یکی این دستور را اجرا کنیم ، آیا راهی هست که بشه تمام خونه های اون ستون تک به تک با این عدد خاص جمع بشه و مقدار هرخونه توی اون خونه خودش ریخته بشه ؟؟؟؟
با تشکر
اگر شماره id ها ترتیبی باشند می توانید قسمت WHERE را به صورت نمونه زیر ویرایش کتید:
 UPDATE tbl SET col = col + 1 WHERE id > 1
در غیر اینصورت راه حل دیگری وجود ندارد و باید دستور UPDATE روی ستون های هدف اجرا شود، البته با برنامه نویسی می توانید در حلقه ها اجرای دستور را به صورت داینامیک انجام دهید.
احسان
۰۳:۴۰ ۱۳۹۶/۱۱/۲۵
با سلام
لطفا راهنمایی کنید
گه ما بخایم در mysql مقادیر خونه های یک ستون رو با یک عدد خاص جمع بزنیم و جمع هرخونه با اون عدد خاص رو داخل همون خونه بریزیم ، باید چیکار کنیم ؟؟؟؟
باتشکر
می توانید از دستور UPDATE به نحو زیر استفاده کنید:
UPDATE tbl SET col = col + 1 WHERE id = 1
نکته: در این حالت نوع داده ستون مورد نظر باید از نوع عددی مانند INT و... باشد.
اسماعیل
۲۳:۲۱ ۱۳۹۵/۰۸/۲۰
سلام من میخوام وقتی مقادیر ستون در گروه ها جمع بسته شده در نتیجه فقط مقدار یک گروه رو نشون بده . مثلا در مثالی که فرمودید فقط جمع مقدار ماشین آبی رو بخوایم .
مرسی از سایت بسیار خوب و عالیتون .
می توانید پارامتر WHERE را به پرس و جوی خود اضافه کنید یا اینکه در حلقه از شرط if استفاده کنید، مثال:
SELECT color, COUNT(price) FROM tb_cars WHERE color = 'blue' GROUP BY color
۲۱:۵۰ ۱۳۹۵/۰۵/۲۳
باید اعتراف کنم که با این اموزش های که به کاربران به صورت رایگان میدهید سایت وبگو یکی از بهترین وب سایت های ایرانی ایست.
دانیال
۲۰:۴۵ ۱۳۹۵/۰۱/۱۸
با سلام و خسته نباشید.
ببخشید اگه ما یک خونه تو دیتابیس داشته باشیم و بخواهیم مقدار اون را با یک مقدار جدید جمع کنیم و دوباره توی همون خونه ذخیره کنیم باید چیکار کنیم.
البته نمیخوام یه بار با کوئری سلکت مقدار رو بخونم و بعد با آپدیت اون رو ذخیره کنم.
ممنون میشم اگه جواب بدید.
می توانید از دستور UPDATE به نحو زیر استفاده کنید:
UPDATE tbl SET col = col + 1 WHERE id = 1
نکته: در این حالت نوع داده ستون مورد نظر باید از نوع عددی مانند INT و... باشد.
امین ولی زاده
۱۸:۳۵ ۱۳۹۴/۰۲/۱۱
سلام من با استفاده از رکورد ست ها و insert توانستم مقدار را در ستونی از جدولی ذخیره کنم الان میخوام هنگام درج داده جدید در جدول جدید مقداری را نیز کسر کنم تا به یک حداقل مقداری برسه پیغام موجودی کم است بدهم
مثلا سایت خرید شارژ که اول یه مقداری را به عنوان مبلغ شارژ بگیرم بعد با هر خرید یا رزرو شارژ مقدار را از آن کسر کنم
برای این کار دو راه وجود دارد، می توانید چند برس و جو (به فرض برای دریافت اطلاعات اولیه از دیتابیس جهت بررسی، افزایش یا کاهش مقدار در کدهای PHP و سپس پرس و جو برای آپدیت اطلاعات و...) را جداگانه بنویسید، یا اینکه اگر ستون مورد نظر از نوع INT باشد، در یک پرس و جو بدون دریافت قبلی اطلاعات، مقداری را کاهش یا افزایش دهید، مثال برای این حالت:
UPDATE tbl SET col = col - 1 WHERE id = 1
البته برای بررسی دقیق قاعدتا باید بر موارد دیگری نیز مسلط باشید که جای طرح آنها در آموزش های مقدماتی است (باید فرآیند آموزش های مقدماتی را طی کرده باشید، در غیر اینصورت درک روال کار پیچیده به نظر خواهد رسید!).
یارمحمدی
۱۰:۵۳ ۱۳۹۳/۰۸/۲۵
سلام بر دوستان. ببخشید من می خوام میانگین یک ستون را در اکسس حساب کنم. اما اطلاعات آن ستون از نوع time می باشد. خواهشمند است اگه راهی داره بفرمایید.
لطفا به سایت های مرتبط با ASP.NET و پایگاه داده ACCESS مراجعه کنید.
reza
۱۳:۰۴ ۱۳۹۳/۰۳/۱۲
سلام دوست گرامی من می خوام یه شمارنده توی جدولم درست کنم که یکی یکی اضافه بشه و در هنگام حذف رکورد یه دونه کم شه
برای این کار باید در جدولی یک ستون از نوع INT ایجاد کنید و در هنگام اجرای پرس و جوها، متناسب با هدفتان، یک پرس و جو هم برای افزایش یا کاهش مقدار ستون مورد نظر اجرا کنید، این کار به صورت یک خطی (نمونه زیر) قابل انجام است:
UPDATE tbl SET stats = stats + 1 WHERE id = 1
به این ترتیب مقدار موجود با عدد 1 جمع شده و برای تفریق از علامت - استفاده کنید.
shahin
۰۰:۱۹ ۱۳۹۲/۱۰/۰۳
سلام دوستان من میخوام مقادیر یک ستون با تابع sum جمع بزنم
مقادیر از 2 تا جدول واکشی می کنم
حالا میخوام مقدار فیلد nomre جمع کنم تابع sum کجاش بزارم؟
$result = mysqli_query($conn, "SELECT karname.nomre,user.nam, FROM karname,user where 
user.id_user=karname.id_user");
سلام
به نظر شیوه زیر برای هدف شما کاربرد دارد (تست نشده!):
$result = mysqli_query($conn, "SELECT SUM(karname.nomre),user.nam, FROM karname,user where 
user.id_user=karname.id_user");
جواد
۱۶:۵۹ ۱۳۹۲/۰۸/۱۶
اقا دستون درد نکنه فک می کنم همون که اول گفتید درست بود مشکل از سرور بود چون mysql رو ارتقا دادم درست شد و روند افزایشی ادامه پیدا کرد بازم ممنون اگه تونستید یه مقاله درباره ی تنظیمات mysql ارائه بدید چون اموزش این قسمت تقریبا در اینترنت موجود نیست و خیلی هم مهمه. با تشکر از سایت خوبتون
جواد
۱۵:۲۳ ۱۳۹۲/۰۸/۱۶
من کد رو از سایت شما کپی گرفتم و اگه کدنویسی ایراد داره چرا روی IE اجرا میشه این کدشه اگه ایرادی داره خواهشا بگید ممنون میشم
حذف شد
به جای حالت زیر:
http://127.0.0.1:8888
از آدرس دهی به این صورت استفاده کنید:
http://localhost
جواد
۱۴:۵۳ ۱۳۹۲/۰۸/۱۵
ببخشید سوالم طولانی شد وقتی که تاخیر در اجرای setinterval رو روی 1000 میلی ثانیه میزارم روند افزایشی فقط 5 بار تکرار و وقتی مثلا روی 0 میزارمش 32 بار اجرا میشه ایا مرورگر در ساخت شی xmlhttp محدودیت داره چون بار هر بار اجرای تابع احتمالا یک نمونه از این شی ساخته میشه ضمن اینکه من با مرورگر ie تست می کنم چون رویداد اژاکسی روی فایرفاکسم انجام نمیشه راهی داره فعالش کنم شاید روی فایرفاکس اجرا بشه؟ بازم ممنون
به نظر کدنویسی شما دارای اشکلاتی است، Ajax در اکثر مرورگرهای استاندارد پشتیبانی می شود و مرورگر نیز در حالت عادی محدودیتی در ساخت شی xmlhttp ندارد!
جواد
۰۰:۰۹ ۱۳۹۲/۰۸/۱۵
من با راهنمایی شما تونستم یه فیلد افزایشی در پایگاه داده ایجاد کنم و مقدارش رو از طریق یه رویداد اژاکسی وارد صفحه کردم ابتدا مشکلم این بود که فقط مقدار فعلی فیلد در صفحه نمایش داده می شد و روند افزایشی نداشت اما با تابع setinterval که رویداد آژاکسی رو درون اون قرار دادم مشکل حل شد و روند افزایشی بوجود اومد اما بعد از 32 بار افزایش روندش متوقف میشه و هر کاری می کنم ادامه پیدا نمیکنه ایا راهی هست متوقف نشه؟ ضمن اینکه من با متد get این کار رو میکنم
به نظر IP شما به دلیل ارسال درخواست های مکرر در یک بازه زمانی کوتاه توسط فایروال سرور بلاک می شود، باید بین درخواست های پی در پی وقفه بیشتری ایجاد کنید.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
6 × 9
20 × 20
=