Q:

SQL concatenated names get lost in rest of result

I have a table containing zip, name and nb. If an entry has the same number (nb) as another one I wan to concatenate their names. So far it's working:
Here is SQL Fiddle with the following table and data:
CREATE TABLE `blubb` (
  `zip` varchar(51) NOT NULL DEFAULT '',
  `name` varchar(51) NOT NULL DEFAULT '',
  `nb` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO blubb (zip, name, nb) VALUES ('1', 'aa', 1);
INSERT INTO blubb (zip, name, nb) VALUES ('2', 'bb', 2);
INSERT INTO blubb (zip, name, nb) VALUES ('3', 'cc', 3);
INSERT INTO blubb (zip, name, nb) VALUES ('4', 'dd', 2);

SELECT 
    zip,
    name,
    GROUP_CONCAT(name ORDER BY zip SEPARATOR '|') AS names
FROM blubb
GROUP BY nb
ORDER BY name ASC

Result:
+-----------------------+
| zip | name  | names   |
+-----------------------+
| 1   | aa    | aa      |
| 2   | bb    | bb|dd   |
| 3   | cc    | cc      |
+-----------------------+

But what I need is this:
+-----------------------+
| zip | name  | names   |
+-----------------------+
| 1   | aa    | aa      |
| 2   | bb    | bb|dd   |
| 3   | cc    | cc      |
| 4   | dd    | dd|bb   |
+-----------------------+

So if a number (nb) exists more then one time I don't want to lose it (which happend in my result). I want to select it and concatenate the names in alphabetic order. The name of the row itself should always be at first place in names followed by the other names in alphatbetic order.
Is this possible? How do I need to change my Query? I tried change the GROUP BY but nothing came closer to what I have.

A:

Thanks to O. Jones answer it was easy to do some string manipulation to get the desired output at the end. This query is was I was looking for, maybe it's helpful to someone else:
SQL Fiddle
SELECT
    a.zip,
    a.name,
    REPLACE(
        CONCAT( a.name, '|', b.names ),
        CONCAT('|', a.name),
        ''
    ) AS names
FROM blubb a
    JOIN (
        SELECT
            nb,
            GROUP_CONCAT(name ORDER BY name ASC SEPARATOR '|') AS names
        FROM blubb
        GROUP BY nb
        ) b ON a.nb = b.nb
 ORDER BY a.zip

and the table with data:
CREATE TABLE `blubb` (
  `zip` varchar(51) NOT NULL DEFAULT '',
  `name` varchar(51) NOT NULL DEFAULT '',
  `nb` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO blubb (zip, name, nb) VALUES ('1', 'aa', 1);
INSERT INTO blubb (zip, name, nb) VALUES ('2', 'bb', 2);
INSERT INTO blubb (zip, name, nb) VALUES ('3', 'cc', 3);
INSERT INTO blubb (zip, name, nb) VALUES ('4', 'dd', 2);
INSERT INTO blubb (zip, name, nb) VALUES ('5', 'ab', 2);
INSERT INTO blubb (zip, name, nb) VALUES ('5', 'cb', 2);
INSERT INTO blubb (zip, name, nb) VALUES ('6', 'ca', 2);

here is SQL Fiddle with alphabetical order on the resulting names

