我有一个包含大量数据的数据库。我想选择所有数据,但是按一列分组。
例如:
column a | column b
example | apple
example | pear
example | orange
example | strawberry
在示例列A中,列是具有重复值且需要分组的列。 但是B列有不同的值,我想选择所有这些值。
最后,我想得到一个查询结果:
example
- apple
- pear
- orange
- strawberry
其中B列的值是jQuery手风琴。
我已经尝试并搜索了几个小时,但仍然没有找到办法做到这一点。
修改 我已经设法使用Gordon提供的答案来解决问题。 使用PHP我展开了查询结果,并使用while循环收集了数组中的所有数据。
现在工作得很好,谢谢你们!
答案 0 :(得分:10)
我认为你可以使用group_concat()
得到你想要的东西:
select a, group_concat(b)
from t
group by a;
这将为每个a创建一个“b”列表。在您的示例中:
example apple,pear,orange,strawberry
您可以使用SEPARATOR
关键字更改分隔符。
编辑:
您可以多次使用group_concat()
:
select a, group_concat(b) as bs, group_concat(c) as cs
from t
group by a;
或者,将其与concat()
:
select a, group_concat(concat(b, ':', 'c')) as bcs
from t
group by a;
答案 1 :(得分:1)
手风琴的实例:http://jsfiddle.net/WMUJ3/207/ 只需在下面的代码中实现。 ;)
安装数据的代码:
<html>
<head>Your page</head>
<body>
<div class="accordion">
<?php echo getData() ?>
</div>
</body>
</html>
<?php
function getData(){
//This get the unique values of column a
$sql = "SELECT DISTINCT column_a FROM table";
$result = mysql_query($sql) or die(mysql_error());
while ($row = mysql_fetch_object($result)) {
$html = "<h3>{$row->column_a}</h3>";
//This get the values with column a some value
$sql2 = "SELECT column_b FROM table WHERE column_a LIKE '%{$row->column_a}%'";
$result2 = mysql_query($sql2) or die(mysql_error());
$html .= '<div class="pane"><ul>';
while ($row2 = mysql_fetch_object($result2)) {
$html .= '<li>{$row2->column_b}</li>';
}
$html .= '</ul></div>';
}
return $html;
}
?>
答案 2 :(得分:1)
所有SQL系统都在表中处理:包含行和列的数据的矩形。你的问题要求的结果集实际上并不是一个矩形的数据,因为它包含“标题”行和“细节”行。
Example: (header row)
- apple (detail row)
通常的做法是在客户端(php)软件中创建这样的标题/细节突破。
专业提示:请记住,如果您未指定ORDER BY,则允许MySQL(和所有SQL)以任何方便的顺序返回结果中的信息。那么,扩大戈登的好答案,你可能想要:
SELECT a,
GROUP_CONCAT(CONCAT(b, ':', 'c') ORDER BY b,c) AS bcs
FROM t
GROUP BY A
ORDER BY A
当我帮助编写一个非常成功的SQL应用程序时,我学到了很多。所有订单都很有效,直到我们切换到更高容量的集群访问方法。然后很多“默认”订单破了,我们的客户看到了奇怪的东西,直到我们修复它。