【发布时间】:2019-01-14 13:48:09
【问题描述】:
我正在尝试实现以下 JSON 结果(循环通过数据库中的行):
[{
"title":"Pasta E Vino Petraglia",
"image_url":"image",
"subtitle":"description 1",
"buttons":[
{
"type": "url",
"caption": "More Details",
"url": "https://domain"
}
]
},{
"title":"La Pasta",
"image_url":"image",
"subtitle":"description 2",
"buttons":[
{
"type": "url",
"caption": "More Details",
"url": "https://domain"
}
]
}]
我想直接在 SQL 查询中进行。我写了这一行,但有些地方不对劲,我无法弄清楚什么是错的,我应该怎么做。
SELECT CONCAT('[{',GROUP_CONCAT(concat_ws(',',concat('"title":"',name,'"'),concat('"image_url":"',image,'"'),concat('"subtitle":"',info,'"'),CONCAT('"buttons":[{',GROUP_CONCAT(concat_ws(',',concat('"type":"url"'),concat('"caption":"More Details"'),concat('"url":"https://domain"')) SEPARATOR '},{'),'}]')
) SEPARATOR '},{'),'}]') FROM `Places`
结果:
组函数的使用无效
我不确定这是实现我想要做的事情的最佳方式,所以任何其他想法也值得赞赏。
我正在使用带有 MyISAM 引擎的 MySQL。
更新
我注意到,当我不嵌套并仅创建简单对象时,它工作正常,并且执行正确。
SELECT CONCAT('[{',GROUP_CONCAT(concat_ws(',',concat('"title":"',name,'"'),concat('"image_url":"',image,'"'),concat('"subtitle":"',info,'"')
) SEPARATOR '},{'),'}]')
所以实际上第二个 concat_group 是问题所在,或者我要连接的地方,这段代码
CONCAT('"buttons":[{',GROUP_CONCAT(concat_ws(',',concat('"type":"url"'),concat('"caption":"More Details"'),concat('"url":"https://domain"')) SEPARATOR '},{'),'}]')
数据库架构
CREATE TABLE `Places` (
`id` int(11) DEFAULT NULL,
`name` varchar(22) DEFAULT NULL,
`info` varchar(197) DEFAULT NULL,
`type` varchar(10) DEFAULT NULL,
`subtype` varchar(15) DEFAULT NULL,
`keywords` varchar(36) DEFAULT NULL,
`image` varchar(140) DEFAULT NULL,
`url` varchar(110) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
样本数据
INSERT INTO `Places` (`id`, `name`, `info`, `type`, `subtype`, `keywords`, `image`, `url`) VALUES
(1, 'Pasta E Vino Petraglia', 'description 1', 'Restaurant', 'Italian', 'pasta ', 'https://lostinplovdiv.com/timthumb.php?src=/media/images/aefb966533cc0bffe40b9d1e14ca0c4c7018de3891db83ccf721cf761df9359e.png&w=460&h=&zc=0', 'https://www.facebook.com/Pasta-E-Vino-Petraglia-194285454717186/'),
(2, 'La Pasta', 'description 2', 'Restaurant', 'Italian', 'pasta', 'https://lostinplovdiv.com/timthumb.php?src=/media/images/291359f1fa156815c2c9632033e23b8c9598885783faca803096e6bebc4c46c6.png&w=460&h=&zc=0', 'https://www.tripadvisor.com/Restaurant_Review-g295391-d11889447-Reviews-La_pasta-Plovdiv_Plovdiv_Province.html'),
(3, 'Brick House', 'BRICK HOUSE description 3', 'Restaurant', 'Burger', 'burger', 'https://lostinplovdiv.com/timthumb.php?src=/media/images/c732a45b8f3b2aec8dfb976f8c3609af7c29d16799ffc73998f09657ad9bb314.png&w=460&h=&zc=0', 'https://bg-bg.facebook.com/brickkhousee/posts');
【问题讨论】:
-
你得到了什么结果?如果你展示你得到的结果,帮助会更容易。
-
请标注您正在使用的数据库引擎,每种技术连接字符串的方式不一样
-
更新缺失的信息
-
@Muhammad Saqlain,你提到的副本和我的不一样