سه شنبه ۰۱ تیر ۱۴۰۰

Tuesday, June 22, 2021 GMT +4: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، مقادیر سایر ردیف ها نیز قابل دسترسی است.
دسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
» استفاده از JOIN و ساخت پرس و جوی ترکیبی در MySQL
» نحوه ذخیره کردن اطلاعات با دستور INSERT در MySQL
» انتخاب ردیف ها با دستور SELECT در MySQL
» استفاده از WHERE در پرس و جوی MySQL
» به روز رسانی ردیف ها در MySQL با UPDATE
commentنظرات (۲۱ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: ایمان
۲۱:۲۹ ۱۳۹۱/۱۱/۱۸
سلام
من میخوام مثلآ بعد از اینکه کاربر یک فرم رو پر کرد بعد یه گزارش از اطلاعاتی که وارد کرده رو بش بدم:
$CurrentID = "SELECT count(*) FROM hotel";
$query = "SELECT * FROM hotel WHERE id=$CurrentID";
... پیغام خطا داد. بعد اینو نوشتم:
$query = "SELECT * FROM hotel where id=MAX(id)";
... پیغام خطا داد.
لطف کنید بگید اشکال کارم چیست.
وقتی بطورت استتیک مینویسم درست کار میکنه:
$query = "SELECT * FROM hotel where id=66";
پاسخ: 
سلام
شیوه استفاده از count و max در کدهایی که نوشتید درست نیست، به مثال هایی که در آموزش ارائه شده توجه کنید، یک بار از توابع در query استفاده شده و یک بار هم در هنگام گرفتن خروجی از آرایه موجود در mysql_fetch_array و حلقه while.
یک روش دیگر استفاده از SELECT، ORDER BY و DESC است، به طور مثال:
$sql = mysql_query("SELECT id FROM table ORDER BY id DESC LIMIT 1") 
or die(mysql_error());
while($row = mysql_fetch_array($sql)){
$id = $row['id'];
}
نویسنده: ایمان
۲۱:۴۴ ۱۳۹۱/۱۱/۱۸
اگه متوجه منظورم نشدید بهتر بگم من میخوام برای اینکار آخرین سطر جدول رو چاپ کنم و برای این کار از ستون id که کلید اصلیم هست و تابع MAX کمک گرفتم که ناموفق بودم، لطفآ ایراد کارم رو بگید یا اگه روش بهتری سراغ دارید ...
خیلی ممنون
نویسنده: ایمان
۰۲:۱۷ ۱۳۹۱/۱۱/۱۹
بسیــــار ممنون
نویسنده: آرش
۱۰:۳۰ ۱۳۹۲/۰۸/۱۰
سلام من یه سوال داشتم یه مثال با having میخواستم در سامانه دانشجو ممنون میشم کمکم منید.
پاسخ: 
سلام
HAVING نقش WHERE را در حالتی که از توابع تجمعی در پرس و جو استفاده می کنیم بازی می کند، مثال:
SELECT user FROM tbl GROUP BY age HAVING COUNT(*) > 1;
مثالی دیگر در حالت معمولی:
SELECT id FROM tbl HAVING  id > 10;
نویسنده: جواد
۱۷:۰۳ ۱۳۹۲/۰۸/۱۳
من یه فیلد عددی در پایگاه داده دارم مقدار اولیه اش 100 هست چطور میشه کاری کرد که این عدد در هر ثانیه افزایش پیدا کنه
پاسخ: 
افزایش مقادیر موجود در دیتابیس به صورت خودکار با استفاده از قابلیت event scheduler در خود MySQL ممکن است، مثال:
CREATE EVENT e_update ON SCHEDULE EVERY 1 SECOND DO UPDATE tbl_name SET col_name = col_name + 1;
نکته: نوع داده ستون مورد نظر باید از نوع INT بوده یا اینکه یک مقدار عددی در آن ست شده باشد.
نویسنده: جواد
۱۶:۱۱ ۱۳۹۲/۰۸/۱۴
واقعا تشکر کارم راه افتاد کاری نمی تونم براتون انجام بدم بجز دعا
نویسنده: جواد
۰۰:۰۹ ۱۳۹۲/۰۸/۱۵
من با راهنمایی شما تونستم یه فیلد افزایشی در پایگاه داده ایجاد کنم و مقدارش رو از طریق یه رویداد اژاکسی وارد صفحه کردم ابتدا مشکلم این بود که فقط مقدار فعلی فیلد در صفحه نمایش داده می شد و روند افزایشی نداشت اما با تابع setinterval که رویداد آژاکسی رو درون اون قرار دادم مشکل حل شد و روند افزایشی بوجود اومد اما بعد از 32 بار افزایش روندش متوقف میشه و هر کاری می کنم ادامه پیدا نمیکنه ایا راهی هست متوقف نشه؟ ضمن اینکه من با متد get این کار رو میکنم
پاسخ: 
به نظر IP شما به دلیل ارسال درخواست های مکرر در یک بازه زمانی کوتاه توسط فایروال سرور بلاک می شود، باید بین درخواست های پی در پی وقفه بیشتری ایجاد کنید.
نویسنده: جواد
۱۴:۵۳ ۱۳۹۲/۰۸/۱۵
ببخشید سوالم طولانی شد وقتی که تاخیر در اجرای setinterval رو روی 1000 میلی ثانیه میزارم روند افزایشی فقط 5 بار تکرار و وقتی مثلا روی 0 میزارمش 32 بار اجرا میشه ایا مرورگر در ساخت شی xmlhttp محدودیت داره چون بار هر بار اجرای تابع احتمالا یک نمونه از این شی ساخته میشه ضمن اینکه من با مرورگر ie تست می کنم چون رویداد اژاکسی روی فایرفاکسم انجام نمیشه راهی داره فعالش کنم شاید روی فایرفاکس اجرا بشه؟ بازم ممنون
پاسخ: 
به نظر کدنویسی شما دارای اشکلاتی است، Ajax در اکثر مرورگرهای استاندارد پشتیبانی می شود و مرورگر نیز در حالت عادی محدودیتی در ساخت شی xmlhttp ندارد!
نویسنده: جواد
۱۵:۲۳ ۱۳۹۲/۰۸/۱۶
من کد رو از سایت شما کپی گرفتم و اگه کدنویسی ایراد داره چرا روی IE اجرا میشه این کدشه اگه ایرادی داره خواهشا بگید ممنون میشم
حذف شد
پاسخ: 
به جای حالت زیر:
http://127.0.0.1:8888
از آدرس دهی به این صورت استفاده کنید:
http://localhost
نویسنده: جواد
۱۶:۵۹ ۱۳۹۲/۰۸/۱۶
اقا دستون درد نکنه فک می کنم همون که اول گفتید درست بود مشکل از سرور بود چون mysql رو ارتقا دادم درست شد و روند افزایشی ادامه پیدا کرد بازم ممنون اگه تونستید یه مقاله درباره ی تنظیمات mysql ارائه بدید چون اموزش این قسمت تقریبا در اینترنت موجود نیست و خیلی هم مهمه. با تشکر از سایت خوبتون
نویسنده: shahin
۰۰:۱۹ ۱۳۹۲/۱۰/۰۳
سلام دوستان من میخوام مقادیر یک ستون با تابع sum جمع بزنم
مقادیر از 2 تا جدول واکشی می کنم
حالا میخوام مقدار فیلد nomre جمع کنم تابع sum کجاش بزارم؟
$result = mysql_query("SELECT karname.nomre,user.nam, FROM karname,user where 
user.id_user=karname.id_user");
پاسخ: 
سلام
به نظر شیوه زیر برای هدف شما کاربرد دارد (تست نشده!):
$result = mysql_query("SELECT SUM(karname.nomre),user.nam, FROM karname,user where 
user.id_user=karname.id_user");
نویسنده: reza
۱۳:۰۴ ۱۳۹۳/۰۳/۱۲
سلام دوست گرامی من می خوام یه شمارنده توی جدولم درست کنم که یکی یکی اضافه بشه و در هنگام حذف رکورد یه دونه کم شه
پاسخ: 
سلام
برای این کار باید در جدولی یک ستون از نوع INT ایجاد کنید و در هنگام اجرای پرس و جوها، متناسب با هدفتان، یک پرس و جو هم برای افزایش یا کاهش مقدار ستون مورد نظر اجرا کنید، این کار به صورت یک خطی (نمونه زیر) قابل انجام است:
UPDATE tbl SET stats = stats + 1 WHERE id = 1
به این ترتیب مقدار موجود با عدد 1 جمع شده و برای تفریق از علامت - استفاده کنید.
نویسنده: یارمحمدی
۱۰:۵۳ ۱۳۹۳/۰۸/۲۵
سلام بر دوستان. ببخشید من می خوام میانگین یک ستون را در اکسس حساب کنم. اما اطلاعات آن ستون از نوع time می باشد. خواهشمند است اگه راهی داره بفرمایید.
پاسخ: 
سلام
لطفا به سایت های مرتبط با ASP.NET و پایگاه داده ACCESS مراجعه کنید.
نویسنده: امین ولی زاده
۱۸:۳۵ ۱۳۹۴/۰۲/۱۱
سلام من با استفاده از رکورد ست ها و insert توانستم مقدار را در ستونی از جدولی ذخیره کنم الان میخوام هنگام درج داده جدید در جدول جدید مقداری را نیز کسر کنم تا به یک حداقل مقداری برسه پیغام موجودی کم است بدهم
مثلا سایت خرید شارژ که اول یه مقداری را به عنوان مبلغ شارژ بگیرم بعد با هر خرید یا رزرو شارژ مقدار را از آن کسر کنم
پاسخ: 
سلام
برای این کار دو راه وجود دارد، می توانید چند برس و جو (به فرض برای دریافت اطلاعات اولیه از دیتابیس جهت بررسی، افزایش یا کاهش مقدار در کدهای PHP و سپس پرس و جو برای آپدیت اطلاعات و...) را جداگانه بنویسید، یا اینکه اگر ستون مورد نظر از نوع INT باشد، در یک پرس و جو بدون دریافت قبلی اطلاعات، مقداری را کاهش یا افزایش دهید، مثال برای این حالت:
UPDATE tbl SET col = col - 1 WHERE id = 1
البته برای بررسی دقیق قاعدتا باید بر موارد دیگری نیز مسلط باشید که جای طرح آنها در آموزش های مقدماتی است (باید فرآیند آموزش های مقدماتی را طی کرده باشید، در غیر اینصورت درک روال کار پیچیده به نظر خواهد رسید!).
نویسنده: دانیال
۲۰:۴۵ ۱۳۹۵/۰۱/۱۸
با سلام و خسته نباشید.
ببخشید اگه ما یک خونه تو دیتابیس داشته باشیم و بخواهیم مقدار اون را با یک مقدار جدید جمع کنیم و دوباره توی همون خونه ذخیره کنیم باید چیکار کنیم.
البته نمیخوام یه بار با کوئری سلکت مقدار رو بخونم و بعد با آپدیت اون رو ذخیره کنم.
ممنون میشم اگه جواب بدید.
پاسخ: 
می توانید از دستور UPDATE به نحو زیر استفاده کنید:
UPDATE tbl SET col = col + 1 WHERE id = 1
نکته: در این حالت نوع داده ستون مورد نظر باید از نوع عددی مانند INT و... باشد.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- موارد غیرمرتبط با مباحث آموزش ها را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ مختصر داده خواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- از درج عناوین تبلیغاتی در فیلدها خودداری کنید، در صورتی که یادداشت تبلیغاتی تشخیص داده شود حذف خواهد شد.
- تمام یادداشت ها بررسی و زمانی جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد خودداری کنید.





1 × 7
 refresh

آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
form علیرضا
در:
مفید و کاربردی مرسی
۱۴۰۰/۰۳/۳۱

form محمود
در:
سلام مهندس وقت بخیر دوباره به کمک شما نیاز پیدا کردم ، چگونه می توان استایل صوت به یک متن داد. به...
۱۴۰۰/۰۳/۳۰

form پرتو
در:
سلام استاد خسته نباشید قالبم درست شد خیلی ممنون یه خواهش دیگه هم ازتون داشتم اینکه یه بوردر برای تک به تک پست ها جداگانه...
۱۴۰۰/۰۳/۲۴

form بهنیا
در:
سلام خسته نباشید ببخشید چطوری میتونم برای خود وبسایتم یه لینک بسازم؟ کد خاصی داره؟
۱۴۰۰/۰۳/۲۴

form Raha
در:
سلام وقت بخیر چه جوری می تونم از دو تا function باهم استفاده کنم. مثلا میخوام توی مسیج باکس دوتا عدد دلخواه بدم...
۱۴۰۰/۰۳/۲۴

form رها
در:
سلام ممنون میشم اگه راهنماییم کنید من میخوام تو جاوا اسکریپت توی مسیج باکس بصورت اختیاری عدد بدم و جمع و تفریق انجام بشه. ...
۱۴۰۰/۰۳/۲۴

form محمد
در:
با عرض سلام و احترام مجدد پیرو کامنت قبلی که لطف کرده و توجه فرمودید آدرس سایت این هست: از توجه و راهنمایی‌های همیشگی...
۱۴۰۰/۰۳/۲۳

form محمد
در:
سلام وقت بخیر با سپاس از تیم محترم وبگو یک سوال داشتم از خدمتتون در عکسی که در آدرس با...
۱۴۰۰/۰۳/۲۲

form پرتو
در:
با سلام استاد من براتون ایمیل فرستادم لطفا ایمیل خود را چک کنید با تشکر
۱۴۰۰/۰۳/۲۱

form پرتو
در:
سلام خوبید خسته نباشید من یه کد قالبی دارم که میشه براتون بفرستم و شما تغییرش بدین من قالبم رو می خاستم اگه...
۱۴۰۰/۰۳/۲۰

form سید ارمیا حسینی
در:
سلام ببخشید عالی بود اما اگه می خواستم مثلا چیزی رو ایجاد کنم که مثلا کاربر بعد از ورود به صحفه 5 ثانیه بعد وارد...
۱۴۰۰/۰۳/۲۰

form الی
در:
سلام وقت بخیر من میخوام یه سایت طراحی کنم و در قسمت هدر یه گیف بذارم ولی هر کار می کنم گیف نمایش داده...
۱۴۰۰/۰۳/۱۸

form علیرضا حسینی
در:
دمتون گرم خسته نباشید خیلی عالی بود
۱۴۰۰/۰۳/۱۸

form حامدترابی
در:
سلام چند وقته که وبلاگ شهیدحسن ترابی گودرزی باز نمیشه ولی با vpn باز میشه. میشه راهنماییم کنید. ممنون میشم
۱۴۰۰/۰۳/۱۶

form mahdi
در:
سلام استاد این تابع در لوکال هم ایمیل ارسال میکنه هم فایل ضمیمه ، البته زمپ رو یه سری تغییرات باید داد و حساب ایمیل...
۱۴۰۰/۰۳/۱۲

form mahdi
در:
سلام وقت بخیر ، استاد عزیز اگر ما با تابع mail یه تابعی بنویسیم که در لوکال قابلیت ارسال هر نوع ایمیلی رو داشته باشه...
۱۴۰۰/۰۳/۱۲

form masood
در:
سلام وقتتون بخیر ببخشید من یک سوالی دارم اگر بخوایم تنظیماتی که برای id و class در نظر داریم رو تو یه...
۱۴۰۰/۰۳/۱۱

form mahdi
در:
استاد وقتشو دارید امشب ببینیدش مثلا در حد نیم ساعت که وقتتونم گرفته نشه؟
۱۴۰۰/۰۳/۱۰

form mahdi
در:
سلام استاد وقت بخیر،استاد عزیز من یه چارت با جاوااسکریپت نوشتم که سه تا نمودار میلیه ای و خطی و نقطه ای رو در بر...
۱۴۰۰/۰۳/۱۰

form پرتو
در:
وای من نمی تونم توی زمینه طراحی قالب های دیگ فعالیت کنم چون خیلی سختن فک نکنم بتونم اگر جایی می شناسید که قالب های...
۱۴۰۰/۰۳/۰۹

form پرتو
در:
سلام خسته نباشید شرمنده مزاحم شدم دوباره، می خاستم بپرسم می ارزه کسی وبلاگ در مورد قالب سازی بزنه یا اینکه نه نمی ارزه آخه...
۱۴۰۰/۰۳/۰۹

form یاس
در:
سلام میخواستم بدونم چجوری باید فایل متنی HTML دارای هایپرلینک را باز کند و محتوای آنرا بخواند و سپس هایپرلینک های آن را شناسایی کند...
۱۴۰۰/۰۳/۰۸

form sattar
در:
سلام، اون قسمتی که اعتبار سنجی ورود حروف فارسی هست مشکل داره یعنی کاربر رو اجبار به وارد کردن حروف فارسی میکنیم اما اگر مثلا...
۱۴۰۰/۰۳/۰۸

form mahdi
در:
سلام استاد ckeditor بهتره یا TinyMCE؟ من اینو ckeditor دیدم که راست چین چپ چین نداشت بعد استاد عزیز من یه چیزی رو...
۱۴۰۰/۰۳/۰۶

form پرتو
در:
ممنونم از شما که کدش رو دادید فقط یه سوال داشتم و اونم اینکه این کد رو در کدوم قسمت قالب قرار بدم و ایا...
۱۴۰۰/۰۳/۰۴

form mahdi
در:
سلام نه استاد عزیز نیازی نیست چون خودمم فکر میکنم لوگو رو باید از قبل مثلا با فتوشاپ آماده داشت و فقط میخواستم این امکانم...
۱۴۰۰/۰۳/۰۳

form پرتو
در:
سلام خواستم تشکر کنم از کدی که قبلا بهم داده بودید درست شد قالبم واقعا ممنونم ازتون یه چیز دیگه می خاستم بگم اینکه یه...
۱۴۰۰/۰۳/۰۳

form دانیال
در:
باسلام خیلی ممنون بابت مطالب عالیه سایتتون این مطلب هم مثل بقیه مطالب عالی بود
۱۴۰۰/۰۳/۰۳

form mahdi
در:
سلام استاد عزیز ، بله استاد اونطوری قرار میگیره وقتی تصویر از قبل مثلا با فتوشاپ شفاف شده باشه ، ولی اگر بخوایم یک عکس...
۱۴۰۰/۰۳/۰۳
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا 24 ساعت زمان ببرد.