MySQL Group由一列组成,但选择所有数据

时间:2014-01-08 13:42:04

标签: jquery mysql sql

我有一个包含大量数据的数据库。我想选择所有数据,但是按一列分组。

例如:

column a | column b
example  | apple
example  | pear
example  | orange
example  | strawberry

在示例列A中,列是具有重复值且需要分组的列。 但是B列有不同的值,我想选择所有这些值。

最后,我想得到一个查询结果:

example
- apple
- pear
- orange
- strawberry

其中B列的值是jQuery手风琴。

我已经尝试并搜索了几个小时,但仍然没有找到办法做到这一点。

修改 我已经设法使用Gordon提供的答案来解决问题。 使用PHP我展开了查询结果,并使用while循环收集了数组中的所有数据。

现在工作得很好,谢谢你们!

3 个答案:

答案 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应用程序时,我学到了很多。所有订单都很有效,直到我们切换到更高容量的集群访问方法。然后很多“默认”订单破了,我们的客户看到了奇怪的东西,直到我们修复它。