Для базы данных PostgreSQL это будет выглядеть так
WITH temp_table AS (
SELECT printer,
CONCAT('{', STRING_AGG(QUOTE_LITERAL(materials), ','), '}') AS materials
FROM printers
GROUP BY printer
)
SELECT CONCAT('{"printer":"', printer, '", "materials":', materials::json, '}') AS json_format
FROM temp_table;
В моём случая (я использую Node.js для создания API) это выглядит вот так
const getPrinterMaterials = async () => {
const query = `WITH temp_table AS (
SELECT printer, CONCAT('{', STRING_AGG(QUOTE_LITERAL(materials), ','), '}') AS materials
FROM printer_materials
GROUP BY printer
)
SELECT CONCAT('{"printer":"', printer, '", "materials":', materials::json, '}') AS json_format
FROM temp_table;`;
//где-то что-то не так с запросом т.к. получаю ошибку неверный синтаксис для типа json
const client = await pool.connect();
try {
const result = await client.query(query);
return result.rows.map(row => row.json_format);
} finally {
client.release();
}
};
module.exports = {
getPrinterMaterials,
};
<
const express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
const db = require('./pool');
const app = express()
const port = 3000
app.use(bodyParser.json())
app.use(
bodyParser.urlencoded({
extended: true,
})
)
app.use(cors())
app.get('/printer_material', db.getPrinterMaterials);