, . .
Dump:
;
;
;
;
CREATE DATABASE IF NOT EXISTS `my` ;
USE `my`;
CREATE TABLE IF NOT EXISTS `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`group_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `FK_category_category_group` (`group_id`),
CONSTRAINT `FK_category_category_group` FOREIGN KEY (`group_id`) REFERENCES `category_group` (`id`) ON DELETE SET NULL ON UPDATE SET NULL
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
;
INSERT INTO `category` (`id`, `name`, `group_id`) VALUES
(1, 'Public Transport', 1),
(2, 'Parking', 1),
(3, 'Food', 2),
(4, 'Fix', 3),
(5, 'Entertainment', 3),
(6, 'Category without group 1', NULL),
(7, 'Category without group 2', NULL);
;
CREATE TABLE IF NOT EXISTS `category_group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
;
INSERT INTO `category_group` (`id`, `name`) VALUES
(2, 'Accommodation '),
(3, 'Allowance '),
(1, 'TRANSPORTATION');
;
;
;
;
PHP:
$categoriesByGroups = array();
$pdo = new PDO('mysql:host=localhost;dbname=my', 'root');
$query = $pdo->prepare('
SELECT c.id AS category_id,
c.name AS category_name,
c.group_id,
g.name AS group_name
FROM category AS c
LEFT JOIN category_group AS g ON g.id = c.group_id
');
$query->execute();
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
if ($row['group_id'] != null) {
$groupId = $row['group_id'];
} else {
$groupId = 0;
}
if (!isset($categoriesByGroups[$groupId])) {
$categoriesByGroups[$groupId] = array(
'categories' => array(),
'group' => $groupId == null ? 'Without group' : $row['group_name']
);
}
$categoriesByGroups[$groupId]['categories'][] = $row['category_name'];
}
foreach ($categoriesByGroups as $group) {
echo 'Group: ' . $group['group'] . '<br/>';
echo 'Categories: <br/>';
foreach ($group['categories'] as $category) {
echo $category . '<br/>';
}
echo '--------------------------------<br/>';
}