I have three database tables projects which contains data about projects
Table "project":
| project_id | name |
|---|---|
| 10000 | Project 1 |
| 20000 | Project 2 |
| 30000 | Project 3 |
| 40000 | Project 4 |
Table "revenues":
| project_id | revenue | fk_setting_id |
|---|---|---|
| 10000 | 2000 | 10 |
| 10000 | 3300 | 20 |
| 20000 | 7000 | 10 |
| 30000 | 1000 | 10 |
| 30000 | 15000 | 20 |
Table "company":
| setting_id | name |
|---|---|
| 10 | MARVEL |
| 20 | UNIVER |
Now, I want to sort projects by column value [input = (sort_key = "MARVEL" order_by="DESC/ASC")] for example give me project sorted by "MARVEL"'s revenue DESC such that I get the results in order mentioned below:
| col1 | col2 |
|---|---|
| 20000 | [{"name": "MARVEL", "revenue": "7000"}] |
| 10000 | [{"name": "MARVEL", "revenue": "2000"},{"name": "UNIVER", "revenue": "3300"}] |
| 30000 | [{"name": "MARVEL", "revenue": "1000"},{"name": "UNIVER", "revenue": "15000"}] |
| 40000 |
I'm using this query but don't know how to perform sorting on such models to get desired above mentioned results:
SELECT p.project_id, p.name, stid.settings
FROM project p
LEFT JOIN (SELECT sid.project_id,
CONCAT('[', GROUP_CONCAT(
JSON_OBJECT(
'name', sas.name
,'revenue', sid.revenue
) SEPARATOR ',')
,']') AS settings
FROM revenues sid
JOIN company sas ON sas.fk_setting_id = sid.setting_id
GROUP BY sid.project_id) stid ON stid.project_id = p.project_id
LIMIT 0,20
Sorting is done by "ORDER BY" is see none in your query.