Reputation: 15616
In mysql db table I have projects with one to many relation with domain table like
projects
----------------
proId | domainId
----------------
1 1
1 2
2 1
3 3
domain
---------------------
domainId | domainName
---------------------
1 Web
2 Mobile
3 iPhone
I query
SELECT p.*, d.* FROM projects p LEFT JOIN domain d ON p.domainId = d.domainId
which results
result
-----------------------------
proId | domainId | domainName
-----------------------------
1 1 Web
1 2 Mobile
2 1 Web
3 3 iPhone
but is it possible to show all domains as single value with concatenation some thing like
-----------------------------
proId | domainId | domainName
-----------------------------
1 1, 2 Web, Mobile
2 1 Web
3 3 iPhone
Upvotes: 1
Views: 82
Reputation: 15616
For quick question I just posted major points now as by help of friends it is solved & now i am posting complete DB Schema & Query.
Schema
CREATE TABLE projects
(`projectId` int, `projectName` varchar(20))
;
INSERT INTO projects
(`projectId`, `projectName`)
VALUES
(1, 'P1'),
(2, 'P2'),
(3, 'P3')
;
CREATE TABLE domain
(`domainId` int, `domainName` varchar(6))
;
INSERT INTO domain
(`domainId`, `domainName`)
VALUES
(1, 'Web'),
(2, 'Mobile'),
(3, 'iPhone')
;
CREATE TABLE prodomain
(`domainId` int, `projectId` int)
;
INSERT INTO prodomain
(`domainId`, `projectId`)
VALUES
(1, 1),
(1, 1),
(3, 2),
(2, 3)
;
Query
SELECT p.projectId as proId, projectName, d.*,
GROUP_CONCAT(d.domainId separator ', ') as all_domains_id,
GROUP_CONCAT(d.domainName separator ', ') as all_domains_name
FROM projects p
LEFT JOIN projectdomains pd ON p.projectId = pd.projectId
LEFT JOIN domains d ON d.domainId = pd.domainId
GROUP BY p.projectId
Upvotes: 1
Reputation: 263693
probably you are looking for GROUP_CONCAT
function.
SELECT a.proID,
GROUP_CONCAT(b.domainID) domainId,
GROUP_CONCAT(b.domainName) domainName
FROM projects a
LEFT JOIN domain b
ON a.domainID = b.domainID
GROUP BY a.proID
Upvotes: 1
Reputation: 125204
SELECT
p.proId,
group_concat(d.domainId) as domainId,
group_concat(d.domainName) as domainName
FROM
projects p
inner JOIN
domain d ON p.domainId = d.domainId
group by p.proId
order by p.proId
Upvotes: 0