"Принтер ч/б" "A3"
"Принтер ч/б" "A4"
"Принтер цвет" "610*175m"
"Принтер цвет" "610*50m"
"Принтер цвет" "914*175m"
"Принтер цвет" "914*50m"
"Принтер цвет" "A3"
"Принтер цвет" "A4"
"Принтер цвет" "A3color"
"Принтер цвет" "A4color"
"Принтер ч/б и цвет" "610*175m"
"Принтер ч/б и цвет" "610*175m"
"Принтер ч/б и цвет" "914*175m"
"Принтер ч/б и цвет" "914*50m"
SELECT DISTINCT printer, materials FROM printer_materials
, но не достиг желаемого результата. Желаемый результат это использовать похожую команду на стороне сервера чтобы получить такие данные в JSON формате по ссылке:[
{
printer: "Принтер ч/б"
{
materials: "A3",
materials: "A4"
}
},
{
printer: "Принтер цвет"
{
materials: "610*175m",
materials: "610*50m",
materials: "914*175m",
materials: "914*50m",
materials: "A3",
materials: "A4",
materials: "A3color",
materials: "A4color"
}
},
{
printer: "Принтер ч/б и цвет",
{
materials: "610*175m",
materials: "610*175m",
materials: "914*175m",
materials: "914*50m"
}
},
]
CREATE TEMPORARY TABLE temp_table AS
SELECT printer,
CONCAT('{', GROUP_CONCAT(QUOTE(materials)), '}') AS materials
FROM printers
GROUP BY printer;
SELECT CONCAT('{"printer":"', printer, '", "materials":', materials, '}') AS json_format
FROM temp_table;
DROP TEMPORARY TABLE IF EXISTS temp_table;
{"printer":"Принтер цвет", "materials":{'A4','A4color','610*175m','610*50m','914*175m','914*50m','A3','A3color'}}
{"printer":"Принтер ч/б", "materials":{'A3','A4'}}
{"printer":"Принтер ч/б и цвет", "materials":{'610*175m','610*175m','914*175m','914*50m'}}
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;
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);