ข้ามไปที่เนื้อหาหลัก

การใช้งาน GROUP_CONCAT ฟังก์ชั่นที่ MySQL ไม่ได้ซ่อนเพียงแต่เราไม่ค่อยใช้กันเอง ^^"



SELECT GROUP_CONCAT(CONCAT(`id`,'":"',`name`) SEPARATOR '", "') AS name FROM `department`;

คำสั่งด้านบนนี้เมื่อคิวรี่เสร็จและเรียกข้อมูลออกมาจะได้ยาวเลยครับ ผมไม่แน่ใจว่าถ้าข้อมูลที่เยอะมากๆจะเหมาะกับการใช้ฟังก์ชั่นนี้หรือไม่ แต่ถ้าข้อมูลหลักผมเรียกใช้แบบนี้สะดวกดีครับ ไม่ต้องวนลูป while

แค่เพียงเติม {" ด้านหน้า และ "} ด้านท้าย
ก็จะกลายเป็นข้อมูลแบบ json แล้วล่ะครับ สามารถแปลงเป็นอาร์เรย์ด้วยคำสั่ง


$row['name'] = '{"' . $row['name'] . '"}';

$array_department = json_decode($row['name']);

แล้วนำไปใช้ได้เลย ไว้มีเวลาจะทำวิดีโอสาธิตแนวคิดที่ผมนำไปใช้งานให้ได้ดูกันนะครับ ^^


ที่มา : http://www.thaicreate.com/tutorial/sql-group-concat.html

วิดีโอสาธิตการใช้งาน

mysql_group_concat.php
<?php
$hostname = "localhost";
$user = "tobedev";
$password = "1234";

$dbname = "helpdesk";

$tblname4 = "tb_m_user";

try {
  $db_conn = new PDO("mysql:host=localhost;dbname=$dbname;charset=utf8", $user, $password);
} catch (PDOException $e) {
  echo "Could not connect to database";
  exit;
}

?>


<table width="100%" Border="1"  Face="Ms Sans Serif">
    <tr>
                <td Bgcolor="#Fcf9d8"><center><strong>ID</strong></center></td>
                <td Bgcolor="#Fcf9d8"><center><strong>Name_Surname</strong></center></td>
                <td Bgcolor="#Fcf9d8"><center><strong>Department</strong></center></td>
                <td Bgcolor="#Fcf9d8"><center><strong>Delete</strong></center></td>
    </tr>   
<?php
//$sql = "SELECT $tblname4.*, department.name FROM $tblname4 INNER JOIN department ON $tblname4.department_id = department.id";
$sql = "SELECT $tblname4.* FROM $tblname4";
try {
  $stmt = $db_conn->prepare($sql);
 
  if($stmt) {
    // perform query
    $stmt->execute();

    $sql = "SELECT GROUP_CONCAT(CONCAT(`id`,'\":\"',`name`) SEPARATOR '\", \"') AS name FROM department";
    $stmt2 = $db_conn->prepare($sql);
    $stmt2->execute();
    $rs = $stmt2->fetch();
    $department = '{"' . $rs['name'] . '"}';
    $arr_department = json_decode($department);
   
//print_r($arr_department);

    while ($row = $stmt->fetch())
    {
    ?>
        <tr>
            <td><center><?echo $row['ID'] ?></center></td>
            <td><?echo $row['NAME_SURNAME']?></td>
            <td align="center"><?echo $arr_department->$row['department_id']?></td>
            <td><center><a href="#">Delete</a></center></td>
        </tr>
                   
    <?php
    }

  }
} catch (PDOException $e) {
  echo "A database problem has occurred: " . $e->getMessage();
}
?>
</table>


ฐานข้อมูล MySQL


--
-- Database: `helpdesk`
--

-- --------------------------------------------------------

--
-- Table structure for table `department`
--

CREATE TABLE IF NOT EXISTS `department` (
  `id` int(11) NOT NULL,
  `name` varchar(40) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

--
-- Dumping data for table `department`
--

INSERT INTO `department` (`id`, `name`) VALUES
(1, 'แผนกลูกค้าสัมพันธ์'),
(2, 'แผนกออกแบบและพัฒนาสินค้า'),
(3, 'แผนกการเงิน'),
(4, 'แผนกบัญชี'),
(5, 'แผนกทรัพยากรบุคคล'),
(6, 'ฝ่ายการตลาด'),
(7, 'ฝ่ายขาย'),
(8, 'ฝ่ายซ่อมบำรุง'),
(9, 'ฝ่ายไอที');

-- --------------------------------------------------------

--
-- Table structure for table `tb_m_user`
--

CREATE TABLE IF NOT EXISTS `tb_m_user` (
  `ID` int(11) NOT NULL,
  `NAME_SURNAME` varchar(50) NOT NULL,
  `department_id` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

--
-- Dumping data for table `tb_m_user`
--

INSERT INTO `tb_m_user` (`ID`, `NAME_SURNAME`, `department_id`) VALUES
(1, 'นางสาวจริงใจ รักจริง', 5),
(2, 'นายแสนดี รักมั่น', 2),
(3, 'นางสมควร  ตั้งมั่น', 7),
(4, 'นายความรู้  คู่คุณธรรม', 9);

--
-- Indexes for dumped tables
--

--
-- Indexes for table `department`
--
ALTER TABLE `department`
  ADD PRIMARY KEY (`id`);

--
-- Indexes for table `tb_m_user`
--
ALTER TABLE `tb_m_user`
  ADD PRIMARY KEY (`ID`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `department`
--
ALTER TABLE `department`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=10;
--
-- AUTO_INCREMENT for table `tb_m_user`
--
ALTER TABLE `tb_m_user`
  MODIFY `ID` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=5;

ความคิดเห็น

แสดงความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

แจกฟรี!! ระบบต่างๆที่พัฒนาด้วย PHP สำหรับนำไปใช้ในงานต่างๆ

       สำหรับหลายท่านที่ขอโค้ดเข้ามาทาง Inbox ของเฟซบุ๊กแฟนเพจ หรือถามถึงระบบต่างๆหลังไมค์มานั้น ส่วนใหญ่ก็มีแจกอยู่แล้วในเว็บบอร์ด ThaiCreate.Com นะครับ และด้านล่างนี้ก็เป็นระบบต่างๆที่แจกให้นำไปลองใช้ลองศึกษากันครับ

สร้างแบบฟอร์มล็อกอิน HTML + PHP

       ผมจะสร้างระบบตัวอย่างเพื่อแสดงให้เห็นการทำงานของสคริปต์ PHP ที่ใช้ในการล็อกอินอย่างง่ายๆ นะครับ โดยที่ผมจะสร้างโฟลเดอร์ใหม่ขึ้นในไดร์ฟที่เราได้กำหนดให้เป็น Directory Root สำหรับรันสคริปต์ PHP ซึ่งผมกำหนดเอาไว้ที่ D:\www ดังนั้นผมจะสร้างโฟลเดอร์ teacher_assistant ขึ้นมาใหม่จะได้พาธเป็น D:\www\teacher_assistant สำหรับการเข้าถึง จะใช้ URL ดังนี้ http://localhost/teacher_assistant หลังจากสร้างโฟลเดอร์เสร็จเรียบร้อยก็จะเริ่มกระบวนการเตรียมโครงสร้างโปรเจ็กต์ด้วยเครื่องมือช่วยเขียนโปรแกรมชื่อว่า eclipse ซึ่งดูวิธีการสร้างโปรเจ็กต์ได้จากบทความ เริ่มต้นสร้างโปรเจ็กต์ ด้วยโปรแกรม eclipse เครื่องมือเขียนโปรแกรม php ในบทความเป็นการสร้างโปรเจ็กต์ที่มีพาธเป็นโฟลเดอร์ login แต่ในที่นี้ต้องเป็นพาธให้ตรงกับโฟลเดอร์ใหม่ที่เราได้สร้างขึ้นด้วยนะครับ

PHP กับการคิดส่วนลดเป็นเปอร์เซ็น 5%, 10%, 20% ตามช่วงราคาที่กำหนด

<?php     $total_price = 1000;     $discount = 0;         if($total_price >= 500 && $total_price < 1001){         $discount = 5;     }elseif($total_price >= 1001 && $total_price <= 5000){         $discount = 10;     }elseif($total_price >= 5001){         $discount = 20;     }         $discount_bath = ($total_price*$discount)/100; ?> <pre> ซื้อสินค้าครบ 0 ถึง 499 บาท ไม่ได้ส่วนลด ซื้อสินค้าครบ 500 ถึง 1000 บาท ได้ส่วนลด 5% ซื้อสินค้าครบ 1001 ถึง 5000บาท ได้ส่วนลด 10% ซื้อสินค้าครบ 5001 บาทขึ้นไป ได้ส่วนลด 20% </pre> <h3>รวมราคาสินค้า = <?php echo number_format($total_price,2);?></h3> <h5>ส่วนลด = <?php echo $discount;?>%  (<?php echo $discount_bath;?> บาท)</h5> <h2>ราคาหลังส่วนลด = <?php echo number_format($total_price - $discount_bath,2);?>บาท</h2> "PHP ไม่ได้สร้างสุดยอดโปรแกรม แต่ PHP ช่วยให้งานคุณง่ายขึ้นต