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;
ขอบคุณครับ
ตอบลบ