รวมเทคนิคต่าง ๆ ในการพัฒนาระบบ ที่น่าสนใจ รวมไว้ที่เดียว มีอะไรสอบถาม สามารถติดต่อผ่านช่องผ่าน Fanpage เราได้เลย

แสดงบทความที่มีป้ายกำกับ MySQL แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ MySQL แสดงบทความทั้งหมด

วันอาทิตย์ที่ 3 พฤษภาคม พ.ศ. 2563

แจก!!! ใช้งาน Autocomplete ร่วมกับฐานข้อมูล ตัวอย่าง Autocomplete จังหวัดในไทย


การทำ Autocomplete คือการเพิ่มความสามารถให้กับ Textbox คือ เมื่อเราพิมพ์ข้อความลงไปใน Textbox ก็จะมีข้อความที่สมบูรณ์แสดงขึ้นมาให้เราเลือก ตามรูปตัวอย่างด้านล่าง


Download


เมื่อ Download เสร็จแล้วจะได้ไฟล์เหมือนในรูป โดยไฟล์ จะมีทั้งตัวอย่างฐานข้อมูล และไฟล์ตัวอย่างการใช้งาน Autocomplete ร่วมกับ Database ดังรูป



ตัวอย่างการใช้งาน Text Autocomplete

ในการยกตัวอย่างการใช้งาน ผมจะขอนำเสนอในรูปแบบของการทำ Autocomplete รายชื่อจังหวัดของประเทศไทย (ลองใช้งานได้ ในกรอบด้านล่าง)




ตัวอย่างการใช้งาน Text Autocomplete ร่วมกับ Database


เริ่มที่ เรียกใช้งาน StyleSheet และ Javascript ใน Tag <header>....</header>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="./inc/demo.css">
<link rel="stylesheet" href="inc/jquery.autocomplete.css">
<script src="./inc/jquery.js" type="text/javascript"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="inc/jquery.autocomplete.js" type="text/javascript"></script>

เชื่อมต่อฐานข้อมูลและดึงข้อมูลจากจังหวัดจากฐานข้อมูลออกมาแสดง จากตัวอย่างด้านล่าง เราจะเก็บชื่อจังหวัดที่
$connect = mysqli_connect('localhost', 'root', '1234', 'test');
mysqli_set_charset($connect, 'utf8');

/************************ ดึงข้อมูลจังหวัดจากฐานข้อมูล *********************/
$sql = "SELECT
pv.name_th
FROM
province AS pv
ORDER BY
CONVERT( pv.name_th USING tis620 ) ASC";
$result = mysqli_query($connect, $sql);
$php_list = '';
foreach ($result as $key => $val){
    $php_list .= "'".$val['name_th']."', ";
}
/********** เก็บค่ารายชื่อจังหวัดทั้งหมดไว้ในตัวแปร ********/
$php_list = substr($php_list,0, strlen($php_list) - 2);

ส่วนฝั่งของ HTML สร้าง Input field ที่ต้องการทำให้เป็น Autocomplete พร้อมกำหนด id ให้กับ Input นั้น เช่น id="province_auto"
<div class="auto" style="padding: 25px; width: 400px;">
<div class="form-group" style="margin:0px;">
<strong>กรอกจังหวัด</strong>
<input type="text" class="form-control" id="province_auto" placeholder="กรอกจังหวัด">
</div>
</div>

ในส่วนของ Script กำหนดค่าตัวแปร province เป็นรายชื่อจังหวัดจากนั้นเรียกใช้งานผ่าน jQuery ด้วยคำสั่ง .autocomplete
<script>
    var province = [<?php echo $php_list?>];

    $('#province_auto').autocomplete({
        source:[province],
        limit: 10
    });
</script>

ขอบคุณความรู้ดี ๆ จาก https://xdsoft.net/


Share:

แจก!!! Code PHP + SQL + Pagination ตัวอย่างหน้ารายงาน จังหวัด อำเภอ ตำบล + การแบ่งหน้า


แจกตัวอย่างการสร้างหน้ารายงานด้วย PHP พร้อมตัวอย่างการดึงข้อมูลจากฐานข้อมูล MySql และการแบ่งหน้าโดยใช้ Function Pagination




อธิบายการใช้งาน PHP Code อย่างละเอียด

เริ่มด้วยตัวอย่างการสร้าง SQL สำหรับดึงข้อมูล จังหวัด อำเภอ ตำบล 

ตัวอย่างด้านล่าง คือการดึงข้อมูลด้วยการเชื่อมตารางทั้ง 3 ตารางเข้าด้วยกัน และเพิ่มเงื่อนไขการดึงข้อมูล WHERE จังหวัดที่มีคำว่า "เชียง" ในชื่อจังหวัด และ LIMIT การแสดงผลข้อมูลไว้ที่ 100 รายการ

หากดึงข้อมูลจากฐานข้อมูลด้วย Query ชุดนี้ Query จะดึงข้อมูลจากฐานข้อมูลมาแสดงและจำกัดการแสดงผลที่ 100 รายการเท่านั้น
SELECT
pv.`code` AS province_code,
pv.name_th AS province_name,
dt.`code` AS district_code,
dt.name_th AS district_name,
sdt.`code` AS subdistrict_code,
sdt.name_th AS subdistrict_name
FROM
province AS pv
INNER JOIN district AS dt ON SUBSTR(pv.`code`,1,2)= SUBSTR(dt.`code`,1,2)
INNER JOIN subdistrict AS sdt ON SUBSTR(dt.`code`,1,4)= SUBSTR(sdt.`code`,1,4)
WHERE
pv.name_th LIKE '%เชียง%'
LIMIT 100


ตัวอย่าง Code การแบ่งหน้าด้วย PHP

ส่วนแรกคือการทำ Code สำหรับแบ่งหน้า รายละเอียดดังนี้
1. เรียกใช้งาน Class แบ่งหน้า
2. นับจำนวน Row ข้อมูลทั้งหมด เพื่อใช้ในการแบ่งหน้า
3. กำหนดค่าตัวแปรสำหรับ Function การแบ่งหน้า
4. ส่งค่าเข้าไปยัง Function การแบ่งหน้า
5. ตัวอย่าง SQL สำหรับแบ่งเพจ
/********* 1. เรียกใช้งาน Class แบ่งหน้า *********/
require_once ("class/class.pagination.php");
$Pagination = new Pagination();

/********* 2. นับจำนวนข้อมูลทั้งหมด $numRows *********/
$sql = "SELECT
COUNT(pv.`code`) AS num_rows
FROM
province AS pv
INNER JOIN district AS dt ON SUBSTR(pv.`code`,1,2)= SUBSTR(dt.`code`,1,2)
INNER JOIN subdistrict AS sdt ON SUBSTR(dt.`code`,1,4)= SUBSTR(sdt.`code`,1,4)
WHERE pv.name_th LIKE '%เชียง%'";
$result = mysqli_query($connect, $sql);
foreach ($result as $key => $val){
    $numRows = $val['num_rows'];
}

/********* 3. กำหนดค่าตัวแปร *********/
$_GET['pageNo'] = (!isset($_GET['pageNo']))? '1' : $_GET['pageNo']; // หน้าปัจจุบัน
$rowPerPage = 15; //แสดงรายการต่อแถว
$link = '?t='; // ใส่ parameter link ที่ต้องการใน Pagination
$showPage = 5; // จำนวนหน้าสูดสุดที่จะแสดงใน Pagination ต่ำสุดคือ 3 ควรใส่เป็นเลขคี่ เช่น 3 5 7

/********* 4. ส่งค่าไปยัง Class Pagination *********/
$limitConfig = $Pagination->pagination($numRows,$_GET['pageNo'],$rowPerPage);
$arrayPage = $Pagination->devidepage($numRows,$_GET['pageNo'],$rowPerPage,$link,$showPage);

/********* 5. ตัวอย่าง SQL ที่ใช้สำหรับแบ่งเพจ *********/
// ดึงข้อมูล จังหวัด อำเภอ ตำบล ที่มีชื่อจังหวัดขึ้นต้นด้วย "เชียง"
// แบ่งหน้า ด้วย คำสั่ง LIMIT และตัว $limitConfig ที่ได้จาก  Class Pagination
$sql = "SELECT
pv.`code` AS province_code,
pv.name_th AS province_name,
dt.`code` AS district_code,
dt.name_th AS district_name,
sdt.`code` AS subdistrict_code,
sdt.name_th AS subdistrict_name
FROM
province AS pv
INNER JOIN district AS dt ON SUBSTR(pv.`code`,1,2)= SUBSTR(dt.`code`,1,2)
INNER JOIN subdistrict AS sdt ON SUBSTR(dt.`code`,1,4)= SUBSTR(sdt.`code`,1,4)
WHERE
pv.name_th LIKE '%เชียง%'
LIMIT {$limitConfig ['start']},{$limitConfig ['rows_perpage']}";

$result = mysqli_query($connect, $sql);


อ่านเรื่องการแบ่งหน้าเพิ่มเติม คลิกที่นี่



ตัวอย่างการใช้งานใช้งาน PHP foreach แสดงผลข้อมูลจากฐานข้อมูล

เมื่อทำการดึงข้อมูลจากฐานข้อมูลมากแล้ว ขั้นตอนไปคือการนำข้อมูลที่ได้มาแสดงผล
รูปแบบคำสั่ง foreach ใช้งานได้ 2 แบบ
รูปแบบนี้จะดึงข้อมูล Array มาแสดงโดยไม่ดึง Array Key มาด้วย
foreach (array_expression as $value)  
    statement

รูปแบบนี้จะดึงข้อมูล Array มาแสดงโดยดึง Array Key ออกมาด้วย
foreach (array_expression as $key => $value)
    statement

ตัวอย่างการวนลูป
<h1 style="padding: 0; margin: 0;">ข้อมูลจังหวัด ที่ขึ้นต้นด้วย "เชียง"</h1>
<table border="1" width="800" cellpadding="">
    <thead>
        <tr>
            <th>ลำดับ</th>
            <th>รหัสจังหวัด</th>
            <th>จังหวัด</th>
            <th>รหัสอำเภอ</th>
            <th>อำเภอ</th>
            <th>รหัสตำบล</th>
            <th>ตำบล</th>
        </tr>
    </thead>
    <tbody>
    <?php
    $cnt = (($_GET['pageNo']-1)*$rowPerPage)+1; // <<< ตัวอย่าง เลขหน้าลำดับการ
    foreach ($result as $val){?>
        <tr>
            <td><?php echo $cnt?></td>
            <td><?php echo $val['province_code']?></td>
            <td><?php echo $val['province_name']?></td>
            <td><?php echo $val['district_code']?></td>
            <td><?php echo $val['district_name']?></td>
            <td><?php echo $val['subdistrict_code']?></td>
            <td><?php echo $val['subdistrict_name']?></td>
        </tr>
    <?php $cnt++;} ?>
    </tbody>
</table>



ตัวอย่างการแบ่งหน้า

ตัวแปร $arrayPage เราจะใช้สำหรับสร้าง Code แบ่งหน้า ตามตัวอย่างด้านล่างนี้
<div style="float:left; font-weight: bold; margin-right: 20px; padding-top: 30px;">หน้า <?php echo $_GET['pageNo']?> / <?php echo ceil($numRows/$rowPerPage)?></div>
<div class="dataTables_paginate paging_simple_numbers mo-paginate" id="data-table_paginate">
    <?php $lastPage = count($arrayPage)-1; ?>
    <ul class="pagination">
        <li class="paginate_button previous" aria-controls="data-table" tabindex="0" id="data-table_previous">
            <a href="<?php echo $arrayPage[0]['link']?>" class="<?php echo $arrayPage[0]['disabled']?>">
                <?php echo $arrayPage[0]['label']?>
            </a>
        </li>

        <?php foreach ($arrayPage as $key => $value): if($key != 0 && $key != $lastPage ):?>
            <li class="paginate_button" aria-controls="data-table" tabindex="0">
                <a href="<?php echo $value['link']?>" class="<?php echo ($_GET['pageNo'] == $value['pageNo']) ? 'current': ''?>">
                    <?php echo $value['label']?>
                </a>
            </li>
        <?php endif; endforeach; ?>

        <li class="paginate_button next" aria-controls="data-table" tabindex="0" id="data-table_next">
            <a href="<?php echo $arrayPage[$lastPage]['link']?>" class="<?php echo $arrayPage[$lastPage]['disabled']?>">
                <?php echo $arrayPage[$lastPage]['label']?>
            </a>
        </li>
    </ul>
</div>





Share:

แจก!!! ฐานข้อมูล จังหวัด อำเภอ ตำบล ประเทศไทย + ตัวอย่าง วิธีใช้งาน Mysql Query


แจก Database ข้อมูล จังหวัด อำเภอ ตำบล ประเทศไทย 

เพื่อใช้สำหรับสร้างเป็นฐานข้อมูลเพื่อแสดงข้อมูล จังหวัด อำเภอ ตำบล ประเทศไทย ภายในเว็บไซต์ของท่าน


Download


ตัวอย่าง คำสั่ง SQL สำหรับเชื่อมโยงข้อมูลตาราง จังหวัด อำเภอ ตำบล

1. ตัวอย่าง Query ข้อมูลจังหวัดผ่าน รหัส หรือ ชื่อจังหวัด

SELECT
pv.`code` AS province_code,
pv.name_th AS province_name
FROM
province AS pv
WHERE
pv.name_th LIKE '%เชียง%' OR pv.`code` LIKE '50%'

ผลลัพธ์ที่ได้

2. ตัวอย่าง Query ข้อมูลด้วยชื่อจังหวัดที่มีคำว่า "ราช" หรือ ชื่ออำเภอที่มีคำว่า "พาน"

SSELECT
pv.`code` AS province_code,
pv.name_th AS province_name,
dt.`code` AS district_code,
dt.name_th AS district_name
FROM
province AS pv
INNER JOIN district AS dt ON SUBSTR(pv.`code`,1,2)= SUBSTR(dt.`code`,1,2)
WHERE pv.name_th LIKE '%ราช%' OR dt.`name_th` LIKE '%พาน%'
ORDER BY RAND() LIMIT 100

ผลลัพธ์ที่ได้

3. ตัวอย่าง Query ข้อมูลตำบลด้วยรหัสอำเภอ

SELECT
sdt.`code` AS province_code,
sdt.name_th AS province_name
FROM
subdistrict AS sdt
WHERE sdt.`code` LIKE '4010%'
LIMIT 100


ผลลัพธ์ที่ได้


4. ตัวอย่าง Query Join ตารางจังหวัด อำเภอ ตำบล เข้าด้วยกัน เชื่อมความสัมพันธ์ ด้วย Field Code

SELECT
pv.`code` AS province_code,
pv.name_th AS province_name,
dt.`code` AS district_code,
dt.name_th AS district_name,
sdt.`code` AS subdistrict_code,
sdt.name_th AS subdistrict_name
FROM
province AS pv
INNER JOIN district AS dt ON SUBSTR(pv.`code`,1,2)= SUBSTR(dt.`code`,1,2)
INNER JOIN subdistrict AS sdt ON SUBSTR(dt.`code`,1,4)= SUBSTR(sdt.`code`,1,4)
WHERE
pv.name_th LIKE '%เชียง%'
LIMIT 100

ผลลัพธ์



อธิบายเพิ่มเติม

ตาราง province คือ จังหวัด
ตาราง district คือ อำเภอ
ตาราง subdistrict คือ ตำบล



Share:

วันเสาร์ที่ 2 พฤษภาคม พ.ศ. 2563

PHP + Mysql แก้ปัญหาภาษาต่างดาวในหน้าเว็บ แสดงผลภาษาไทย บนหน้าเว็บไซต์



ปัญหาเว็บแสดงภาษาต่างดาว

เชื่อวว่าหลายคนคงเลยเจอปัญหาเว็บไซต์มีปัญหา แสดงผลข้อความภาษาไทยออกมาเป็นภาษาต่างดาว แบบตัวอย่างด้านล่าง

รหัส 81000000 ชื่อ ��к��
รหัส 10000000 ชื่อ ��ا෾��ҹ��
รหัส 71000000 ชื่อ �ҭ������
รหัส 46000000 ชื่อ ����Թ���
รหัส 62000000 ชื่อ ��ᾧྪ�
รหัส 40000000 ชื่อ �͹��
รหัส 22000000 ชื่อ �ѹ�����
รหัส 24000000 ชื่อ ���ԧ���
รหัส 20000000 ชื่อ �ź���
รหัส 18000000 ชื่อ ��¹ҷ

ปัญหาที่เกิดขึ้นมักจะเกิดจากการดึงข้อมูลจากฐานข้อมูลมาแสดงในหน้าเว็บ ดังนั้นเราสามารถแก้ไขปัญหาดังกล่าวด้วยวิธีต่อไปนี้

1. ส่วน HTML แทรก meta tag charset="utf-8" ตามตัวอย่างด้านล่าง
<html lang="th">
<head>
    <meta http-equiv=Content-Type content="text/html; charset=utf-8">
</head>
<body>

</body>

2. ส่วน PHP การเชื่อมต่อฐานข้อมูลให้ระบุ charset = 'utf8' ทุกครั้ง เหมือนตัวอย่างด้านล่าง
$connect = mysqli_connect('localhost', 'root', '1234', 'database_name');
mysqli_set_charset($connect, 'utf8');

3. ตั้งค่าที่จำเป็นแล้ว มาลอง Query ข้อมูลกัน โดยทดลอง เขียน SQL เพื่อดึงข้อมูลจากตารางด้านล่าง ตามรูปนี้

4. ทดลองเขียน Code PHP เพื่อดึงข้อมูลจากฐานข้อมูลมาแสดง
$connect = mysqli_connect('localhost', 'root', '1234', 'database_name');

mysqli_set_charset($connect, 'utf8');

$sql = "SELECT
pv.`code`,
pv.name_th
FROM
config_area_province AS pv
ORDER BY
CONVERT( pv.name_th USING tis620 ) ASC
LIMIT 10";

$result = mysqli_query($connect, $sql);

foreach ($result as $key => $detail){
    echo "รหัส ".$detail['code']." ชื่อ ".$detail['name_th']."<br>";
}

ผลลัพธ์
รหัส 81000000 ชื่อ กระบี่
รหัส 10000000 ชื่อ กรุงเทพมหานคร
รหัส 71000000 ชื่อ กาญจนบุรี
รหัส 46000000 ชื่อ กาฬสินธุ์
รหัส 62000000 ชื่อ กำแพงเพชร
รหัส 40000000 ชื่อ ขอนแก่น
รหัส 22000000 ชื่อ จันทบุรี
รหัส 24000000 ชื่อ ฉะเชิงเทรา
รหัส 20000000 ชื่อ ชลบุรี
รหัส 18000000 ชื่อ ชัยนาท

เรียบร้อยเท่านี้เราก็แก้ปัญหา ภาษาต่างดาว และสามารถแสดงผลภาษาไทย บนหน้าเว็บของเราได้แล้ว


รวมเทคนิค PHP+SQL << คลิกที่นี่






Share:

MySQL เรียงลำดับตามตัวอักษร ภาษาไทย ตัวอย่างการใช้งานร่วมกับ PHP


ก่อนอื่นต้องทำการเชื่อมต่อฐานข้อมูล ถ้ายังทำไม่เป็นคลิกอ่านก่อนเลย  PHP connect SQL


ตัวอย่างตาราง


โดยปกติแล้ว เมื่อเราทำการ Query ข้อมูลมาจากฐานข้อมูล หากว่า Collation ของ Field ในฐานข้อมูลเป็น "utf8_general_ci" เหมือนในรูป เมื่อเราทำการ Query ข้อมูลออกมากจะไม่สามารถเรียงลำดับข้อมูล
ก - ฮ หรือ ฮ - ก ได้

แต่เรามีวิธีแก้ไขปัญหานี้ง่าย ๆ ด้วยคำสั่ง
CONVERT( 'field_name' USING tis620 ) ASC

ตัวอย่าง SQL สำหรับเรียงลำดับข้อมูล
ตัวอย่างการใช้งาน
SELECT
pv.`code`,
pv.name_th
FROM
config_area_province AS pv
ORDER BY
CONVERT( pv.name_th USING tis620 ) ASC
LIMIT 10

จาก SQL ด้านบนเราจะได้ผลลัพธ์ ตามรูปนี้

Note:
จะเห็นได้ว่าเราสามารถเรียงลำดับตัวอักษรภาษาไทย รวมทั้งสระต่างๆ ของภาไทยได้อย่างถูกต้อง


ตัวอย่างการใช้ CONVERT ในรูปแบบ Code PHP
$sql = "SELECT
pv.`code`,
pv.name_th
FROM
config_area_province AS pv
ORDER BY
CONVERT( pv.name_th USING tis620 ) ASC
LIMIT 10";

$result = mysqli_query($connect, $sql);

foreach ($result as $key => $detail){
    echo "รหัส ".$detail['code']." ชื่อ ".$detail['name_th']."<br>";
}

ผลลัพธ์

รหัส 81000000 ชื่อ กระบี่
รหัส 10000000 ชื่อ กรุงเทพมหานคร
รหัส 71000000 ชื่อ กาญจนบุรี
รหัส 46000000 ชื่อ กาฬสินธุ์
รหัส 62000000 ชื่อ กำแพงเพชร
รหัส 40000000 ชื่อ ขอนแก่น
รหัส 22000000 ชื่อ จันทบุรี
รหัส 24000000 ชื่อ ฉะเชิงเทรา
รหัส 20000000 ชื่อ ชลบุรี
รหัส 18000000 ชื่อ ชัยนาท



รวมเทคนิค PHP+SQL << คลิกที่นี่






Share:

Min Max Avg SQL หาค่าน้อยสุด มากสุด ค่าเฉลี่ย ตัวอย่างการใช้งานร่วมกับ PHP


ก่อนอื่นต้องทำการเชื่อมต่อฐานข้อมูล ถ้ายังทำไม่เป็นคลิกอ่านก่อนเลย  PHP connect SQL

ตัวอย่างตาราง

อธิบาย Function

MIN()ใช้สำหรับหาค่าที่น้อยสุด
MAX() ใช้สำหรับหาค่าที่มากสุด
AVG() ใช้สำหรับหาค่าเฉลี่ย

ตัวอย่างการใช้งาน Function
ตัวอย่างการใช้งาน
SELECT
FORMAT(MIN(t1.doc_price),2) AS min_price,
FORMAT(MAX(t1.doc_price),2) AS max_price,
FORMAT(AVG(t1.doc_price),2) AS avg_price
FROM
doc_deal_credit_list AS t1

จาก SQL ด้านบนเราจะได้ผลลัพธ์ ตามรูปนี้

Note:
รูปแบบของการใช้ MIN MAX AVG + การใช้งานรวมกับ FORMAT
คำสั่ง MIN
MIN(field)


คำสั่ง MAX
MAX(field)


คำสั่ง AVG
AVG(field)


คำสั่ง FORMAT + MAX
FORMAT(MAX(field))



ตัวอย่างการใช้ COUNT IF ในรูปแบบ Code PHP
$sql = "SELECT
FORMAT(MIN(t1.doc_price),2) AS min_price,
FORMAT(AVG(t1.doc_price),2) AS avg_price,
FORMAT(MAX(t1.doc_price),2) AS max_price
FROM
doc_deal_credit_list AS t1";

$result = mysqli_query($connect, $sql);

foreach ($result as $key => $detail){
    echo "ค่าน้อยสุด ".number_format($detail['m1'],2)." บาท <br>";
    echo "ค่ามากสุด ".number_format($detail['m2'],2)." บาท <br>";
    echo "ค่าเฉลี่ย ".number_format($detail['m3'],2)." บาท";
    echo "<hr>";

}

ผลลัพธ์

ค่าน้อยสุด 267.00 บาท
ค่ามากสุด  354.01 บาท
ค่าเฉลี่ย 490.00 บาท


รวมเทคนิค PHP+SQL << คลิกที่นี่






Share:

SUM IF MySQL สรุปจำนวนตัวเลขแยกตามเดือน ตัวอย่างการใช้งานร่วมกับ PHP


ก่อนอื่นต้องทำการเชื่อมต่อฐานข้อมูล ถ้ายังทำไม่เป็นคลิกอ่านก่อนเลย  PHP connect SQL

ตัวอย่างตาราง

ตัวอย่าง Sum if SQL สำหรับดึงข้อมูลสรุปตัวเลขของแต่ละเดือน
ตัวอย่างการใช้งาน
SELECT
YEAR(t1.doc_date) AS `year`,
Sum(IF(MONTH(t1.doc_date)=1,t1.doc_price,0)) AS `m1`,
Sum(IF(MONTH(t1.doc_date)=2,t1.doc_price,0)) AS `m2`,
Sum(IF(MONTH(t1.doc_date)=3,t1.doc_price,0)) AS `m3`,
Sum(IF(MONTH(t1.doc_date)=4,t1.doc_price,0)) AS `m4`,
Sum(IF(MONTH(t1.doc_date)=5,t1.doc_price,0)) AS `m5`,
Sum(IF(MONTH(t1.doc_date)=6,t1.doc_price,0)) AS `m6`,
Sum(IF(MONTH(t1.doc_date)=7,t1.doc_price,0)) AS `m7`,
Sum(IF(MONTH(t1.doc_date)=8,t1.doc_price,0)) AS `m8`,
Sum(IF(MONTH(t1.doc_date)=9,t1.doc_price,0)) AS `m9`,
Sum(IF(MONTH(t1.doc_date)=10,t1.doc_price,0)) AS `m10`,
Sum(IF(MONTH(t1.doc_date)=11,t1.doc_price,0)) AS `m11`,
Sum(IF(MONTH(t1.doc_date)=12,t1.doc_price,0)) AS `m12`
FROM
doc_deal_credit_list AS t1
WHERE YEAR(t1.doc_date) < 2020
GROUP BY `year`

จาก SQL ด้านบนเราจะได้ผลลัพธ์ ตามรูปนี้

Note:
รูปแบบของการใช้ IF และ SUM IF
คำสั่ง IF
IF(condition, value_true, value_false)
คำสั่ง SUM IF
SUM(IF(condition, value_true, value_false))

หากต้องการระบุปีที่ต้องการดึงข้อมูลเราสามารถเปลี่ยนข้อมูล WHERE เช่น ต้องการดึงข้อมูลปี 2018 เราสามารถเขียนได้ ดังนี้
WHERE YEAR(t1.doc_date) = 2018

หากต้องการระบุ ช่วงปี ที่ต้องการดึงข้อมูลเราสามารถเปลี่ยนข้อมูล WHERE เช่น ต้องการดึงข้อมูลปี 2018 - 2020 เราสามารถเขียนได้ ดังนี้
WHERE YEAR(t1.doc_date) BETWEEN 2018 AND 2020



ตัวอย่างการใช้ COUNT IF ในรูปแบบ Code PHP
$sql = "SELECT
YEAR(t1.doc_date) AS `year`,
Sum(IF(MONTH(t1.doc_date)=1,t1.doc_price,0)) AS `m1`,
Sum(IF(MONTH(t1.doc_date)=2,t1.doc_price,0)) AS `m2`,
Sum(IF(MONTH(t1.doc_date)=3,t1.doc_price,0)) AS `m3`,
Sum(IF(MONTH(t1.doc_date)=4,t1.doc_price,0)) AS `m4`,
Sum(IF(MONTH(t1.doc_date)=5,t1.doc_price,0)) AS `m5`,
Sum(IF(MONTH(t1.doc_date)=6,t1.doc_price,0)) AS `m6`,
Sum(IF(MONTH(t1.doc_date)=7,t1.doc_price,0)) AS `m7`,
Sum(IF(MONTH(t1.doc_date)=8,t1.doc_price,0)) AS `m8`,
Sum(IF(MONTH(t1.doc_date)=9,t1.doc_price,0)) AS `m9`,
Sum(IF(MONTH(t1.doc_date)=10,t1.doc_price,0)) AS `m10`,
Sum(IF(MONTH(t1.doc_date)=11,t1.doc_price,0)) AS `m11`,
Sum(IF(MONTH(t1.doc_date)=12,t1.doc_price,0)) AS `m12`
FROM
doc_deal_credit_list AS t1
WHERE YEAR(t1.doc_date) < 2020
GROUP BY `year`";

$result = mysqli_query($connect, $sql);

foreach ($result as $key => $detail){
    echo "<b>ปี ".$detail['year']."</b><br>";
    echo "เดือน มกราคม ".number_format($detail['m1'],2)." บาท <br>";
    echo "เดือน กุมภาพันธ์ ".number_format($detail['m2'],2)." บาท <br>";
    echo "เดือน มีนาคม ".number_format($detail['m3'],2)." บาท <br>";
    echo "เดือน เมษายน ".number_format($detail['m4'],2)." บาท <br>";
    echo "เดือน พฤษภาคม ".number_format($detail['m5'],2)." บาท <br>";
    echo "เดือน มิถุนายน ".number_format($detail['m6'],2)." บาท <br>";
    echo "เดือน กรกฏาคม ".number_format($detail['m7'],2)." บาท <br>";
    echo "เดือน สิงหาคม ".number_format($detail['m8'],2)." บาท <br>";
    echo "เดือน กันยายน ".number_format($detail['m9'],2)." บาท <br>";
    echo "เดือน ตุลาคม ".number_format($detail['m10'],2)." บาท <br>";
    echo "เดือน พฤศจิกายน ".number_format($detail['m11'],2)." บาท <br>";
    echo "เดือน ธันวาคม ".number_format($detail['m12'],2)." บาท ";
    echo "<hr>";

}

ผลลัพธ์

ปี 2018
เดือน มกราคม 0.00 บาท
เดือน กุมภาพันธ์ 0.00 บาท
เดือน มีนาคม 0.00 บาท
เดือน เมษายน 0.00 บาท
เดือน พฤษภาคม 0.00 บาท
เดือน มิถุนายน 4,555.00 บาท
เดือน กรกฏาคม 16,160.00 บาท
เดือน สิงหาคม 17,351.00 บาท
เดือน กันยายน 11,034.00 บาท
เดือน ตุลาคม 16,414.00 บาท
เดือน พฤศจิกายน 8,452.00 บาท
เดือน ธันวาคม 8,074.00 บาท

ปี 2019
เดือน มกราคม 7,769.00 บาท
เดือน กุมภาพันธ์ 0.00 บาท
เดือน มีนาคม 0.00 บาท
เดือน เมษายน 0.00 บาท
เดือน พฤษภาคม 0.00 บาท
เดือน มิถุนายน 0.00 บาท
เดือน กรกฏาคม 0.00 บาท
เดือน สิงหาคม 0.00 บาท
เดือน กันยายน 0.00 บาท
เดือน ตุลาคม 0.00 บาท
เดือน พฤศจิกายน 0.00 บาท
เดือน ธันวาคม 0.00 บาท


รวมเทคนิค PHP+SQL << คลิกที่นี่






Share:

COUNT IF MySQL นับข้อมูลแบบหลายค่าพร้อมกัน ตัวอย่างการใช้งานร่วมกับ PHP


ก่อนอื่นต้องทำการเชื่อมต่อฐานข้อมูล ถ้ายังทำไม่เป็นคลิกอ่านก่อนเลย  PHP connect SQL

ตัวอย่างตาราง

บทความก่อนหน้านี้เราได้ทำการสอนวิธีการ COUNT IF ผ่าน Function COUNT ของ Mysql ไปแล้ว ท่านสามารถอ่านได้   >>คลิกที่นี่<<

แต่ข้อจำกัดของการใช้งาน Function COUNT ก็คือเราสามารถใช้นับจำนวนได้ทีละ 1 ค่าเท่านั้น ดังนั้น วันนี้ OnlyMycode จะมาแนะนำวิธีนับจำนวนข้อมูลแบบหลาย ๆ ค่าพร้อมกัน

ตัวอย่างที่ 1 นับจำนวนแบบมีเงื่อนไข line_no = 1, 3 และ 5
ตัวอย่างการใช้งาน
SELECT
SUM(IF(t1.line_no = 1,1,0)) AS line_no1,
SUM(IF(t1.line_no = 3,1,0)) AS line_no3,
SUM(IF(t1.line_no = 5,1,0)) AS line_no5
FROM
doc_deal_credit_list AS t1


จาก SQL ด้านบนเราจะได้ผลลัพธ์ line_no1 = 28 / line_no1 = 26 / line_no1 = 21

Note: จากตัวอย่างด้านบน เราสามารถนับจำนวนแยกตามเงื่อนไข line_no = 1, 3 และ 5 โดยที่เราระบุเงื่อนไขไว้ที่ Function SUM IF ได้เลย


ตัวอย่างที่ 2 ลองเพิ่มเงื่อนไข ดึงข้อมูล doc_price ระหว่าง 200 - 300
ตัวอย่างการใช้งาน
SELECT
SUM(IF(t1.line_no = 1,1,0)) AS line_no1,
SUM(IF(t1.line_no = 3,1,0)) AS line_no2,
SUM(IF(t1.line_no = 5,1,0)) AS line_no3
FROM
doc_deal_credit_list AS t1
WHERE t1.doc_price BETWEEN 200 AND 300

จาก SQL ด้านบนเราจะได้ผลลัพธ์ line_no1 = 7 / line_no1 = 8 / line_no1 = 8

Note: เราสามารถเพิ่มเงื่อนไขการนับให้กับการนับข้อมูลผ่าน WHERE เงื่อนไขที่เราเพิ่มเข้าไปจะถูก Apply ไปใช้กับการนับจำนวนทุกค่าในชุด SQL ของเรา


ตัวอย่างที่ 3 Advance Condition ระบุเงื่อนไขให้แต่ละค่าที่ต้องการนับ
ตัวอย่างการใช้งาน
SELECT
SUM(IF(t1.line_no = 1 AND t1.doc_price BETWEEN 200 AND 300,1,0)) AS line_no1,
SUM(IF(t1.line_no = 3 AND t1.doc_price BETWEEN 300 AND 350,1,0)) AS line_no2,
SUM(IF(t1.line_no = 5 AND t1.doc_price BETWEEN 200 AND 250,1,0)) AS line_no3
FROM
doc_deal_credit_list AS t1

จาก SQL ด้านบนเราจะได้ผลลัพธ์ line_no1 = 6 / line_no1 = 3 / line_no1 =0

Note: เราสามารถระบุเงื่อนไขการให้กับการนับข้อมูลแบบจำเพาะผ่าน IF ในแต่ละข้อมูลเราต้องการนับดังตัวอย่างด้านบน


ตัวอย่างการใช้ COUNT IF แบบหลายค่าในรูปแบบ Code PHP
$sql = "SELECT
SUM(IF(t1.line_no = 1 AND t1.doc_price BETWEEN 200 AND 300,1,0)) AS line_no1,
SUM(IF(t1.line_no = 3 AND t1.doc_price BETWEEN 300 AND 350,1,0)) AS line_no2,
SUM(IF(t1.line_no = 5 AND t1.doc_price BETWEEN 200 AND 250,1,0)) AS line_no3
FROM
doc_deal_credit_list AS t1
WHERE t1.id > 500";
$result = mysqli_query($connect, $sql);

foreach ($result as $key => $detail){
    echo "บรรทัดที่ 1 : ".$detail['line_no1']." รายการ<br>";
    echo "บรรทัดที่ 2 : ".$detail['line_no2']." รายการ<br>";
    echo "บรรทัดที่ 2 : ".$detail['line_no3']." รายการ<br>";
    echo "<hr>";
}

ผลลัพธ์
บรรทัดที่ 1 : 6 รายการ
บรรทัดที่ 2 : 3 รายการ
บรรทัดที่ 3 : 0 รายการ


สรุป
เราจะใช้ Mysql SUM IF นิยมใช้ในกรณีที่เราต้องการนับจำนวนรายการ หลาย ๆ รายการพร้อมกันโดยระบุเงื่อนไขเฉพาะไปพร้อมกัน เช่น
นับจำนวนคนตามช่วงอายุ ช่วง 10 - 20 / 21 - 30 / 31 ขึ้นไป
นับจำนวนรถตามสี เช่น สีดำ / สีขาว / สีแดง / สีอื่น
นับห้องตามสถานะ เช่น จอง / พัก /
เป็นต้น

รวมเทคนิค PHP+SQL << คลิกที่นี่




Share:

วันศุกร์ที่ 1 พฤษภาคม พ.ศ. 2563

COUNT IF MySQL นับข้อมูลแบบมีเงื่อนไข ตัวอย่างการใช้งานร่วมกับ PHP


ก่อนอื่นต้องทำการเชื่อมต่อฐานข้อมูล ถ้ายังทำไม่เป็นคลิกอ่านก่อนเลย  PHP connect SQL

ตัวอย่างตาราง


หากเราต้องการนับจำนวนข้อมูลที่มีค่า line_no = '1'
ตัวอย่างการใช้งาน
SELECT
COUNT(t1.line_no) AS doc_deal
FROM
doc_deal_credit_list AS t1
WHERE t1.line_no = '1'

จาก SQL ด้านบนเราจะได้ผลลัพธ์ doc_deal = 28


ลองเพิ่มเงื่อนไข ดึงข้อมูล doc_price ระหว่าง 200 - 300
ตัวอย่างการใช้งาน
SELECT
COUNT(t1.line_no) AS doc_deal
FROM
doc_deal_credit_list AS t1
WHERE t1.line_no = '1' AND t1.doc_price BETWEEN 200 AND 300

จาก SQL ด้านบนเราจะได้ผลลัพธ์ doc_deal = 7


ตัวอย่างการใช้ COUNT IF ในรูปแบบ Code PHP
$sql = "SELECT
COUNT(t1.line_no) AS doc_deal
FROM
doc_deal_credit_list AS t1
WHERE t1.line_no = '1' AND t1.doc_price BETWEEN 200 AND 300";
$result = mysqli_query($connect, $sql);

foreach ($result as $key => $detail){
    echo "จำนวน ".$detail['doc_deal']." รายการ ";
    echo "<hr>";
}

ผลลัพธ์ จำนวน 7 รายการ


สรุป
เราจะใช้ Mysql COUNT นิยมใช้ในกรณีที่เราต้องการนับจำนวนรายการในฐานข้อมูลที่มีเงื่อนไขเฉพาะเช่น นับจำนวนคนตามช่วงอายุ / นับจำนวนรถตามสี / นับห้องตามสถานะ เป็นต้น

รวมเทคนิค PHP+SQL << คลิกที่นี่






Share:

ลบฐานข้อมูลด้วย PHP | Delete database data


ก่อนอื่นต้องทำการเชื่อมต่อฐานข้อมูล ถ้ายังทำไม่เป็นคลิกอ่านก่อนเลย  PHP connect SQL

ตัวอย่างการใช้งาน PHP DELETE ฐานข้อมูล

การลบฐานข้อมูล สิ่งที่สำคัญที่ต้องมีคู่กันทุกครั้ง คือการ WHERE โดยปกติแล้วการ WHERE จะอ้างอิงค่า PK ของตารางที่เราต้องการอัพเดทข้อมูลลงไป
รูปแบบ
DELETE FROM table_name WHERE field1 = 'value1'

ตัวอย่างการใช้งาน
$sql ="DELETE FROM `cookbook` WHERE id = '2' ";

mysqli_query($connect, $sql);


ตัวอย่างที่ 2 ลบข้อมูลของทุกรายการ ที่ไม่ใช่เพศชาย
ตัวอย่างการใช้งาน
$sql ="DELETE FROM `cookbook` WHERE `sax` !=  'male' ";

mysqli_query($connect, $sql);


ปล: PK ย่อมาจาก Primary Key

รวมเทคนิค PHP+SQL << คลิกที่นี่






Share:

อัพเดทฐานข้อมูลด้วย PHP | Update database data


ก่อนอื่นต้องทำการเชื่อมต่อฐานข้อมูล ถ้ายังทำไม่เป็นคลิกอ่านก่อนเลย  PHP connect SQL

ตัวอย่างการใช้งาน PHP UPDATE ฐานข้อมูล

การอัพเดทฐานข้อมูล สิ่งที่สำคัญที่ต้องมีคู่กันทุกครั้ง คือการ WHERE โดยปกติแล้วการ WHERE จะอ้างอิงค่า PK ของตารางที่เราต้องการอัพเดทข้อมูลลงไป
รูปแบบ
UPDATE table_name SET
field2 = 'value2',
field3 = 'value3'
WHERE 
field1 = 'value1'

ตัวอย่างการใช้งาน
$sql ="UPDATE `cookbook` SET
`name` = 'name',
created_by = 'atom',
`timestamp` = NOW()WHERE id = '2' ";

mysqli_query($connect, $sql);


ตัวอย่างที่ 2 แก้ไขข้อมูลของทุกรายการ ที่มีเพศเป็นเพศชาย
ตัวอย่างการใช้งาน
$sql ="UPDATE `human_body` SET
`min_weight` = '40',
`timestamp` = NOW()
WHERE `sax`= 'male' ";

mysqli_query($connect, $sql);


ปล: PK ย่อมาจาก Primary Key

รวมเทคนิค PHP+SQL << คลิกที่นี่






Share:

แทนที่ข้อมูล เข้าฐานข้อมูลด้วย PHP | Insert กับ Replace ใช้งานต่างกันอย่างไร


ก่อนอื่นต้องทำการเชื่อมต่อฐานข้อมูล ถ้ายังทำไม่เป็นคลิกอ่านก่อนเลย  PHP connect SQL

Insert กับ Replace ใช้งานต่างกันอย่างไร

Insert Into
แปลตรงตัว คือการเพิ่มข้อมูลลงไปในฐานข้อมูล วิธีการใช้งาน Insert Into ท่านสามารถอ่านได้ใน Link เพิ่มข้อมูล เข้าฐานข้อมูลด้วย PHP | ใช้ Insert Into แบบต่าง ๆ

Replace Into แปลตรงตัว คือการแทนที่ข้อมูลลงไปในฐานข้อมูล มีการทำงานและการเขียนคล้ายคลึงกับ Insert Into แต่จะเพิ่มความสามารถที่เหนือกว่า Insert เข้าไปคือ

  • กรณีที่มีข้อมูล Row นั้นในฐานข้อมูลอยู่แล้ว (อ้างอิงจาก PK) คำสั่งจะทำการแทนที่ค่าใน Row นั้นลง ไปในฐานข้อมูล
  • กรณีที่ยังไม่มีข้อมูล Row นั้นในฐานข้อมูล (อ้างอิงจาก PK) คำสั่งจะทำการเพิ่มค่าใหม่ลงไปในฐานข้อมูล

ปล1: Replace Into ควรระบุ PK ลงไปด้วยทุกครั้ง ไม่อย่างนั้นคำสั่งจะทำการเพิ่มข้อมูลใหม่ลงไป แทนที่จะแทนที่ข้อมูลลงไปในฐานข้อมูล

ปล2: PK ย่อมาจาก Primary Key

การใช้งาน Replace Into มี 3 รูปแบบดังนี้
รูปแบบที่ 1: ระบุ Field ที่ต้องการ Replace ลงไปพร้อมกับระบุค่าที่ต้องการเพิ่มลงไปในฐานข้อมูล
รูปแบบ
REPLACE INTO table_name (column1, column2, column3, ...)

VALUES (value1, value2, value3, ...);

ตัวอย่างการใช้งาน
$sql ="REPLACE INTO `cookbook` (id, `name`, created_by, `timestamp`)
VALUES ('1','test','atom',NOW())";

mysqli_query($connect, $sql);

รูปแบบที่ 2: ไม่ระบุ Field ระบุเฉพาะค่าที่ต้องการเพิ่มลงไปในฐานข้อมูล (วิธีนี้เหมาะกับกรณีที่ต้องการเพิ่มข้อมูลเข้าฐานข้อมูลและเพิ่มค่าลงในทุก Field ของตางราง)
รูปแบบ
REPLACE INTO table_name
VALUES (value1, value2, value3, ...);

ตัวอย่างการใช้งาน
$sql ="REPLACE INTO `cookbook`
VALUES ('1','test','atom',NOW())";

mysqli_query($connect, $sql);

รูปแบบที่ 3: วิธีนี้ผมแถมให้ เป็นวิธีที่ผมใช้อยู่ตลอด
รูปแบบ
REPLACE INTO table_name SET
field1 = 'value1', 
field2 = 'value2',
field3 = 'value3'

ตัวอย่างการใช้งาน
$sql ="REPLACE INTO `cookbook` SET
id = '2',
`name` = 'name',
created_by = 'atom',
`timestamp` = NOW()";

mysqli_query($connect, $sql);


รวมเทคนิค PHP+SQL << คลิกที่นี่






Share:

เพิ่มข้อมูล เข้าฐานข้อมูลด้วย PHP | ใช้ Insert Into แบบต่าง ๆ


ก่อนอื่นต้องทำการเชื่อมต่อฐานข้อมูล ถ้ายังทำไม่เป็นคลิกอ่านก่อนเลย  PHP connect SQL

ตัวอย่างการใช้งาน Insert Into

การใช้งาน Insert Into คือการเพิ่มข้อมูลลงไปในฐานข้อมูล มี 3 รูปแบบดังนี้

รูปแบบที่ 1: ระบุ Field ที่ต้องการ Insert ลงไปพร้อมกับระบุค่าที่ต้องการเพิ่มลงไปในฐานข้อมูล
รูปแบบ
INSERT INTO table_name (column1, column2, column3, ...)

VALUES (value1, value2, value3, ...);

ตัวอย่างการใช้งาน
$sql ="INSERT INTO `cookbook` (id, `name`, created_by, `timestamp`)
VALUES ('1','test','atom',NOW())";

mysqli_query($connect, $sql);

รูปแบบที่ 2: ไม่ระบุ Field ระบุเฉพาะค่าที่ต้องการเพิ่มลงไปในฐานข้อมูล (วิธีนี้เหมาะกับกรณีที่ต้องการเพิ่มข้อมูลเข้าฐานข้อมูลและเพิ่มค่าลงในทุก Field ของตางราง)
รูปแบบ
INSERT INTO table_name
VALUES (value1, value2, value3, ...);

ตัวอย่างการใช้งาน
$sql ="INSERT INTO `cookbook`
VALUES ('1','test','atom',NOW())";

mysqli_query($connect, $sql);

รูปแบบที่ 3: วิธีนี้ผมแถมให้ เป็นวิธีที่ผมใช้อยู่ตลอด
รูปแบบ
INSERT INTO table_name SET
field1 = 'value1', 
field2 = 'value2',
field3 = 'value3'

ตัวอย่างการใช้งาน
$sql ="INSERT INTO `cookbook` SET
id = '2',
`name` = 'name',
created_by = 'atom',
`timestamp` = NOW()";

mysqli_query($connect, $sql);


รวมเทคนิค PHP+SQL << คลิกที่นี่






Share:

บทความที่ได้รับความนิยม

Search

บทความอื่น ๆ