JavaScript + MariaDB: json 개체 배열을 반환하고 응답에서 '\' 포워드 슬래시를 제거하는 SQL 쿼리
javascript 기능으로 sql(mariaDB) 테이블에 raw 쿼리를 적용하고 있습니다.
::: 업데이트된 질문 :::
아래는 sql 쿼리를 만들기 위한 javascript 함수이며, 이 함수는 제가 시도한 것이기도 합니다.JSON_ARRAY
그리고.JSON_OBJECT
답변에 제시된 방법들
public async getProducts() {
try {
let productTbl = '`products`';
let prodImgTbl = '`product_images_ids`';
let productImg = '`product_images`';
let query = `SELECT
${productTbl}.id AS productId,
GROUP_CONCAT(JSON_ARRAY(JSON_OBJECT(
"imageId", ${prodImgTbl}.id,
"imageUrl", ${productImg}.thumbnail_image
))) imageData,
FROM ${productTbl}
JOIN ${prodImgTbl} ON ${prodImgTbl}.product_id = ${productTbl}.id
JOIN ${productImg} ON ${productImg}.id = ${prodImgTbl}.product_image_id
GROUP BY ${productTbl}.id `
let records = await pool.query(query);
return records
} catch (error) {
throw error;
}
}
이 쿼리를 사용하여 아래와 같이 우체부에서 결과를 얻고 있습니다.\
각각의 키와 값에 적용할 수 있습니다.
this.productList = [
{
"productId": 3,
"imageData": "[{\"imageId\": 17, \"imageUrl\": \"/assets/images/321/1/1/1/image.jpg\"}],[{\"imageId\": 18, \"imageUrl\": \"/assets/images/322/image.jpg\"}]",
}
]
위 컬렉션을 루프로 이동하려고 하면 다음과 같은 오류가 발생합니다.TypeError: lists.imageData.map is not a function
this.productList.map((lists) => {
lists.imageData.map((data) => {
data.imageId
})
})
그래서 제가 렌더링하고 싶었던 결과는 다음과 같습니다. 그래서 제가 레코드를 순환할 수 있도록 말이죠.
[ RowDataPacket {
productId: 3,
imageData [
{
imageId: 18,
imageUrl: /assets/images/321/image.jpg
},
{
imageId: 17,
imageUrl: /assets/images/322/image.jpg
}
]
}
]
관리자 도구에서 실행되는 SQL 쿼리
SELECT
`products`.id AS productId,
GROUP_CONCAT(JSON_ARRAY(JSON_OBJECT(
"imageId", `product_images_ids`.id,
"imageUrl", `product_images`.thumbnail_image
))) imageData
FROM `products`
JOIN `product_images_ids` ON `product_images_ids`.campaign_id = `products`.id
JOIN `product_images` ON `product_images`.id = `product_images_ids`.product_image_id
GROUP BY `products`.id
그리고 여기 관리자가 받는 결과 스크린샷이 있습니다.
json_arrayagg와 json_objectagg로 확인했지만 json 객체 배열을 만들 수 없습니다.
추신: MySQL 버전: 5.5.5-10.3.22-마리아DB
퍼팅 aCONCAT
안에서.GROUP_CONCAT
창조하다, 창조.JSON
여기에 목적어
npm인지 잘 모르겠습니다.mariadb
모듈이 구조를 파악할 것입니다.
let query = `SELECT
${productTbl}.id AS productId,
GROUP_CONCAT(
CONCAT('{imageId:"'${prodImgTbl}'", imageUrl:"'${productImg}.thumbnail_image'"}')) imageData
FROM ${productTbl}
JOIN ${prodImgTbl} ON ${prodImgTbl}.product_id = ${productTbl}.id
JOIN ${productImg} ON ${productImg}.id = ${prodImgTbl}.product_image_id
GROUP BY ${productTbl}.id`
안되면 JSON 타입(전체 GROUP_CONCAT 또는 그 안의 모든 표현)으로 캐스팅 해보세요.
CAST(
CONCAT(
'[', GROUP_CONCAT(
CONCAT('{"imageId": "'${prodImgTbl}'",
"imageUrl": "'${productImg}.thumbnail_image'"}')),']')
AS JSON) imageData
최신 mariadb 버전을 사용하는 경우 JSON_OBJECT가 있습니다.
GROUP_CONCAT(JSON_OBJECT("imageId", ${prodImgTbl}, "imageUrl", ${productImg}.thumbnail_image)) imageData
---편집
전화해도 좋습니다.JSON.parse
각각imageData
this.productList = map(pr => ({...pr, imageData: JSON.parse(pr.imageData)}))
이전에 비슷한 질문이 있었고 여기서 그들은 전체 JSON을 쿼리로 만들 것을 제안합니다.
`SELECT JSON_OBJECT(
'productId',
${productTbl}.id,
'imageData',
CAST(
CONCAT(
'[', GROUP_CONCAT(
CONCAT('{"imageId": "'${prodImgTbl}'",
"imageUrl": "'${productImg}.thumbnail_image'"}')),']')
AS JSON)
)
FROM ${productTbl}
JOIN ${prodImgTbl} ON ${prodImgTbl}.product_id = ${productTbl}.id
JOIN ${productImg} ON ${productImg}.id = ${prodImgTbl}.product_image_id
GROUP BY ${productTbl}.id`
유감스럽게도 당신은 여전히 전화를 해야 할 것입니다.JSON.parse
let records = JSON.parse(await pool.query(query));
let query = `SELECT
${productTbl}.id AS productId,
JSON_OBJECTAGG(${prodImgTbl}, ${productImg}.thumbnail_image) imageData
FROM ${productTbl}
JOIN ${prodImgTbl} ON ${prodImgTbl}.product_id = ${productTbl}.id
JOIN ${productImg} ON ${productImg}.id = ${prodImgTbl}.product_image_id
GROUP BY ${productTbl}.id`
하지만 제 생각에는 위를 배열로 만들어서 전화를 하려면 아직 연결 작업을 좀 해야 할 것 같습니다.JSON.parse
이래저래
언급URL : https://stackoverflow.com/questions/62259357/javascript-mariadb-sql-query-to-return-array-of-json-objects-and-remove-f
'programing' 카테고리의 다른 글
:remote => 형식으로 파일 업로더를 사용하면 작동하지 않습니다. (0) | 2023.09.06 |
---|---|
jQuery의 ajax 메서드를 사용하여 이미지를 blob으로 검색 (0) | 2023.09.06 |
OAuth2Rest Template 사용법? (0) | 2023.09.06 |
난수 행렬을 만드는 간단한 방법 (0) | 2023.09.06 |
배열의 길이를 확인하려면 어떻게 해야 합니까? (0) | 2023.09.06 |