如何在不重复节点-mysql 中的键的情况下获得完整的 JSON?
How can I get a full JSON without repeating keys in node-mysql?
我正在尝试为应用程序做一个 API。这是我的 Mysql 结构。
mysql> desc player;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(30) | NO | UNI | NULL | |
| password | varchar(30) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
3 rows in set (0,00 sec)
mysql> desc team;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(30) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0,00 sec)
mysql> desc player_team;
+--------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| player | int(11) | NO | MUL | NULL | |
| team | int(11) | NO | MUL | NULL | |
+--------+---------+------+-----+---------+----------------+
3 rows in set (0,00 sec)
我正在使用 node-mysql 包执行此节点代码:
var express = require('express');
var router = express.Router();
var connection = require('../lib/mysql.js');
router.get('/', function(req, res, next) {
var query = 'select p.name as player, t.name as team from player p join player_team pt on p.id=pt.player join team t on pt.team = t.id order by player;';
connection.query(query , function(error, result){
if (error){
res.send(error);
}
else {
res.json(result);
}
});
});
然后是下一个 JSON:
[
{
"player":"arzeus",
"team":"Origen"
},
{
"player":"haton",
"team":"Fnatic"
},
{
"player":"haton",
"team":"Origen"
},
{
"player":"loko",
"team":"Fnatic"
}
]
让球员 "haton" 两队都在一个阵列中的最佳方法是什么?我知道我可以手动完成,但我想知道是否已经有一些方法可以自动完成。
[
{
"player":"arzeus",
"team":"Origen"
},
{
"player":"haton",
"teams" {
"team":"Fnatic",
"team":"Origen"
}
},
{
"player":"loko",
"team":"Fnatic"
}
]
最接近 MySQL 的是 GROUP_CONCAT。
请注意,您想要的输出无论如何都不可能(如果您希望在 JavaScript 中使用它),因为对象不能有重复的属性名称:
{
"team":"Fnatic",
"team":"Origen"
}
您是指对象数组吗?像这样:
"teams": [
{"team": "Fnatic"},
{"team": "Origen"}
]
或者只是一组团队:
"teams": ["Fnatic" "Origen"]
无论如何,为了更接近您所追求的东西,GROUP_CONCAT
最终会给您:
{
"player":"haton",
"teams" "Fnatic,Origen"
}
我正在尝试为应用程序做一个 API。这是我的 Mysql 结构。
mysql> desc player;
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(30) | NO | UNI | NULL | |
| password | varchar(30) | NO | | NULL | |
+----------+-------------+------+-----+---------+----------------+
3 rows in set (0,00 sec)
mysql> desc team;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(30) | NO | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0,00 sec)
mysql> desc player_team;
+--------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| player | int(11) | NO | MUL | NULL | |
| team | int(11) | NO | MUL | NULL | |
+--------+---------+------+-----+---------+----------------+
3 rows in set (0,00 sec)
我正在使用 node-mysql 包执行此节点代码:
var express = require('express');
var router = express.Router();
var connection = require('../lib/mysql.js');
router.get('/', function(req, res, next) {
var query = 'select p.name as player, t.name as team from player p join player_team pt on p.id=pt.player join team t on pt.team = t.id order by player;';
connection.query(query , function(error, result){
if (error){
res.send(error);
}
else {
res.json(result);
}
});
});
然后是下一个 JSON:
[
{
"player":"arzeus",
"team":"Origen"
},
{
"player":"haton",
"team":"Fnatic"
},
{
"player":"haton",
"team":"Origen"
},
{
"player":"loko",
"team":"Fnatic"
}
]
让球员 "haton" 两队都在一个阵列中的最佳方法是什么?我知道我可以手动完成,但我想知道是否已经有一些方法可以自动完成。
[
{
"player":"arzeus",
"team":"Origen"
},
{
"player":"haton",
"teams" {
"team":"Fnatic",
"team":"Origen"
}
},
{
"player":"loko",
"team":"Fnatic"
}
]
最接近 MySQL 的是 GROUP_CONCAT。
请注意,您想要的输出无论如何都不可能(如果您希望在 JavaScript 中使用它),因为对象不能有重复的属性名称:
{
"team":"Fnatic",
"team":"Origen"
}
您是指对象数组吗?像这样:
"teams": [
{"team": "Fnatic"},
{"team": "Origen"}
]
或者只是一组团队:
"teams": ["Fnatic" "Origen"]
无论如何,为了更接近您所追求的东西,GROUP_CONCAT
最终会给您:
{
"player":"haton",
"teams" "Fnatic,Origen"
}