[英]How to group on PHP MySQL JOIN results?
預期結果:
Berries: blueberry, raspberry, strawberry
Citrus: grapefruit, lime
Pear
SQL:
CREATE TABLE IF NOT EXISTS `fruits` (
`id` varchar(8) NOT NULL,
`group` varchar(8) NOT NULL,
`name` varchar(250) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO `fruits` (`id`, `group`, `name`) VALUES
('03E7', '', 'Berries'),
('0618', '03E7', 'blueberry'),
('051B', '03E7', 'raspberry'),
('02AA', '03E7', 'strawberry'),
('035F', '', 'Citrus'),
('07A5', '035F', 'grapefruit'),
('0633', '035F', 'lime'),
('05E1', '', 'Pear');
當前的PHP:
<?php
header("Content-Type: text/plain");
mysql_connect("localhost", "root", "");
mysql_select_db("test");
$query = mysql_query("SELECT a.name as `group`, b.name as name FROM fruits a LEFT JOIN fruits b ON b.`group` = a.id WHERE a.`group` = ''");
if ($query) {
while ($row = mysql_fetch_array($query)) {
echo $row['group'] . ': ' . $row['name'] . "\n";
}
mysql_free_result($query);
}
?>
當前結果:
Berries: blueberry
Berries: raspberry
Berries: strawberry
Citrus: grapefruit
Citrus: lime
Pear:
SELECT a.name, GROUP_CONCAT(b.name) ... WHERE a.group = '' GROUP BY a.name
總之,您需要一個GROUP BY
子句,並且grouped列需要以某種方式聚合(否則,您將只獲得一個值)。 如果這不起作用,您可以使用得到的結果在PHP代碼中輕松完成此操作:
$fruits = array();
while ($row = fetch($query)) {
//Can be skipped, but you will get notices
if (!isset($fruits[$row['group']]) {
$fruits[$row['group']] = array();
}
$fruits[$row['group']] = $row['name'];
}
感謝@ExplosionPills發現我有關MySQL GROUP_CONCAT
我已更新了返回預期結果的代碼段:
<?php
$query = mysql_query("SELECT a.name as `group`, GROUP_CONCAT(b.name ORDER BY b.name SEPARATOR ', ') as name FROM fruits a LEFT JOIN fruits b ON b.`group` = a.id WHERE a.`group` = '' GROUP BY a.name");
if ($query) {
while ($row = mysql_fetch_array($query)) {
$group = $row['group'];
$name = $row['name'];
if (isset($name)) {
echo $group . ': ' . $name . "\n";
} else {
echo $group . "\n";
}
}
mysql_free_result($query);
}
?>
SQL結果:
顯示第0-2行(共3行,查詢耗時0.0004秒)。
group | name
--------+--------
Berries | blueberry, raspberry, strawberry
Citrus | grapefruit, lime
Pear | NULL
PHP結果:
Berries: blueberry, raspberry, strawberry
Citrus: grapefruit, lime
Pear
歡迎大家進行更好的改進和改進?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.