Alberto
Alberto

Reputation: 313

MySQL (or PHP?) group results by field data

I have a MySQL database that looks similar to this:

ID    Group   Name

1       1       John
2       1       Andrea
3       1       Jack
4       2       Mike
5       2       Kurt
6       3       Alice

I need to sort the results in a html table that looks like this:

Group       Name
-----------------------
  1         John
            Andrea
            Jack
-----------------------
  2         Mike
            Kurt
-----------------------
  3         Alice
-----------------------

I don't know if this should be done with a SQL query (concat_group, or something similar) or with PHP, can somebody please help me out?

Guys, thanks for the help below, but I also need to accomplish something similar, like this:

ID    meta_key  meta_value   name

1       group     1          John
2       group     1          Andrea
3       group     1          Jack
4       group     2          Mike
5       group     2          Kurt
6       group     3          Alice

and I need to sort / display the same as the example above, something like this:

group       name
-----------------------
  1         John
            Andrea
            Jack
-----------------------
  2         Mike
            Kurt
-----------------------
  3         Alice
-----------------------

Now my problem has taken new dimensions. My database looks like:

b.ID    b.meta_key  b.meta_value   a.title   

1       group       1                Title 1
2       group       1                Title 2
3       group       1                Title 3
4       group       2                Title 4
5       group       2                Title 5
6       group       3                Title 6
7       coef        6                Title 1
8       coef        4                Title 2
9       coef        12               Title 3
9       coef        2                Title 4
9       coef        3                Title 5
9       coef        7                Title 6

(I'm working with to tables)

And I need to achieve:

group       title         coef
---------------------------------
  1         Title 1        6 
            Title 2        2
            Title 3        12
--------------------------------
  2         Title 4        2
            Title 5        3
--------------------------------
  3         Title 6        7
--------------------------------

¿Is this even possible?

Upvotes: 1

Views: 11996

Answers (2)

MacMac
MacMac

Reputation: 35301

Try this:

// SQL stuff

$group = null;

while($row = mysql_fetch_array($result))
{
    if($row['group'] != $group)
    {
        echo $row['group'];
        $group = $row['group'];
    }

    $row['name'];
}

Upvotes: 6

armonge
armonge

Reputation: 3138

This would my solution, althoug is not elegant at all

<?php
$dbc = new MySQLI(DBHOST,DBUSER,DBPASS,DB);
$result = $dbc->query("
SELECT
p.Group as 'group',
GROUP_CONCAT(name) as names
FROM prueba p
GROUP BY p.Group
");
?>
<table>
<tr>
    <th>Group</th>
    <th>Name</th>
</tr>
<?php while($row = $result->fetch_assoc()){
    $names = split(",",$row["names"]);
?>
    <tr>
        <td><?php echo $row["group"] ?> </td>
        <td><?php echo $names[0]; array_shift($names) ?></td>
    </tr>
    <?php foreach( $names as $name){ ?>
        <tr>
            <td></td>
            <td><?php echo $name ?></td>
        </tr>
    <?php } ?>
<?php } ?>
</table>

Upvotes: 7

Related Questions