通过php将带有3个表的mysql数据库导出为json格式

gojuced7  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(374)

我想把我数据库的数据导出到下面的json格式,我已经试过了,但是我只能显示一个表,不能显示整个表。

  1. CREATE TABLE generic (
  2. id INTEGER NOT NULL PRIMARY KEY,
  3. errorCode INT,
  4. errorMsg TEXT,
  5. PRIMARY KEY (id)
  6. );
  7. CREATE TABLE generic_data (
  8. generic_id TEXT,
  9. id INT,
  10. name TEXT,
  11. ovpn TEXT,
  12. category TEXT,
  13. PRIMARY KEY (id),
  14. FOREIGN KEY (generic_id) REFERENCES generic(id)
  15. );
  16. CREATE TABLE generic_data_children (
  17. generic_data_id INT,
  18. id INT,
  19. name TEXT,
  20. config TEXT,
  21. PRIMARY KEY (id),
  22. FOREIGN KEY (generic_data_id) REFERENCES generic_data(id)
  23. );

这是我的数据库信息和表列供参考
应为json格式:

  1. {
  2. "data": [{
  3. "children": [{
  4. "id": 1,
  5. "name": "Default",
  6. "config": "config1"
  7. }, {
  8. "id": 2,
  9. "name": "sample",
  10. "config": "config2"
  11. }, {
  12. "id": 3,
  13. "name": "sample2",
  14. "config": "config3"
  15. }, {
  16. "id": 4,
  17. "name": "testnetwork",
  18. "config": "config4"
  19. }, {
  20. "id": 5,
  21. "name": "sample5",
  22. "config": "config5"
  23. }],
  24. "id": 1,
  25. "name": "PH-Philippines 1",
  26. "ovpn": "testovpn",
  27. "category": "Private"
  28. }],
  29. "errorCode": 0,
  30. "errorMsg": ""
  31. }
xxls0lw8

xxls0lw81#

你可以用 JSON_ARRAY() , GROUP_CONCAT() 以及 JSON_OBJECT() 共同起作用

  1. SELECT JSON_PRETTY(
  2. REPLACE(
  3. REPLACE(
  4. REPLACE(
  5. JSON_OBJECT(
  6. 'errorCode', g.errorCode,
  7. 'errorMsg', COALESCE(g.errorMsg,""),
  8. 'data',JSON_ARRAY(
  9. (SELECT
  10. JSON_OBJECT('id',gd.id,
  11. 'name',gd.name,
  12. 'ovpn',gd.ovpn,
  13. 'children',
  14. JSON_ARRAY(
  15. GROUP_CONCAT(
  16. JSON_OBJECT('name',gdc.name,
  17. 'id',gdc.id,
  18. 'config',gdc.config)
  19. ) )
  20. )
  21. FROM generic_data_children gdc
  22. LEFT JOIN generic_data AS gd
  23. ON gd.id = gdc.generic_data_id
  24. WHERE generic_data_id = g.id
  25. )
  26. )
  27. )
  28. ,'\\"','"')
  29. ,'"{','{')
  30. ,'}"','}')
  31. ) AS 'New JSON'
  32. FROM generic g

演示
使用 REPLACE() 最后需要函数来格式化双引号相关的内容。
顺便说一句,摆脱 PRIMARY KEY 重复第一个表,并转换 generic_id 列到 INT 在第二张table里。

展开查看全部

相关问题