Php 如何根据联接数组的值为内部联接表选择列
我在本地服务器上用phpMyAdmin创建了一个mySQL数据库。在这个数据库中,我存储了我朋友的名字和最喜欢的NBA球队。这显然是一种多对多的关系。因此,我在MySQL中运行以下脚本为该数据库创建适当的表:Php 如何根据联接数组的值为内部联接表选择列,php,mysql,json,Php,Mysql,Json,我在本地服务器上用phpMyAdmin创建了一个mySQL数据库。在这个数据库中,我存储了我朋友的名字和最喜欢的NBA球队。这显然是一种多对多的关系。因此,我在MySQL中运行以下脚本为该数据库创建适当的表: CREATE TABLE `friends` ( `id` int(4) NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, PRIMARY KEY (`id`) ); CREATE TABLE `teams` (
CREATE TABLE `friends` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `teams` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `relations` (
`friends_id` int(4) NOT NULL,
`teams_id` int(4) NOT NULL,
`status` varchar(30) NOT NULL
);
显然,我在这些表中插入了一些值,但是为了节省一些空间,我没有在这里提供大量的源代码。其中一小部分如下所示:
INSERT INTO `friends` (`id`, `name`)
VALUES
(1,'David Belton'),
(2,'Alex James');
INSERT INTO `teams` (`id`, `name`)
VALUES
(1,'Cleveland Cavaliers'),
(2,'Boston Celtics'),
(3,'Houston Rockets');
INSERT INTO `relations` (`friends_id`, `teams_id`, `status`)
VALUES
(1,1, 'Current'),
(2,1, 'Current'),
(2,2, 'Past'),
(2,3, 'Past');
在运行从数据库获取数据并打印它们的PHP脚本之后,我希望为我的每个朋友提供以下类型的有效json输出:
{
"id": "1",
"name": "Alex James",
"Current team": ["Boston Celtics"]
"Past team": [ "Cleveland Cavaliers", "Houston Rockets"]
}
如何使用MySQL为每个人创建一组最受欢迎的团队
另外,我现在的问题是受以下回答问题的启发:
对于这些类型的查询,您必须使用mysql 5.7版。使用这些查询,您可以使用查询中的json类型和函数 答复:
SELECT GROUP_CONCAT( JSON_OBJECT(
'id', f.id, 'fname', f.name, 'tname', t.name, 'current_status', r.status), (SELECT JSON_OBJECT('name', tm.name)
FROM teams tm, relations re
WHERE tm.id = re.teams_id
AND f.id = re.friends_id
AND re.status = "Past"))
FROM teams t, relations r, friends f
WHERE t.id = r.teams_id
AND f.id = r.friends_id
AND r.status = "Current"
谢谢你的回复。不过,最好是更具分析性地编写,并将其与链接问题的答案相结合,因为它不会给出我想要的输出。您好,我再次编辑了我的答案并共享了第二个sqlfiddle链接。我查看了您的帖子,再次编辑了我的答案。我想这是你想要的,对吧?你的回答很好,但我的问题中仍然缺少一些主要的东西。请再次阅读我的问题:我想要
{“id”:“2”,“name”:“Alex James”,“Paststeam”:[“克利夫兰骑士”,“休斯顿火箭队”]}
不分开{“id”:“2”,“name”:“Alex James”,“Paststeam”:[“Boston Celtics”]}
和{“id”:“2”,“name”:“Alex James”,“Paststeam”:[“休斯顿火箭队”]}
。你能做到吗?嗨,波特,我误解了你的问题:)现在,它工作得很好。
SELECT GROUP_CONCAT( JSON_OBJECT(
'id', f.id, 'fname', f.name, 'tname', t.name, 'current_status', r.status), (SELECT JSON_OBJECT('name', tm.name)
FROM teams tm, relations re
WHERE tm.id = re.teams_id
AND f.id = re.friends_id
AND re.status = "Past"))
FROM teams t, relations r, friends f
WHERE t.id = r.teams_id
AND f.id = r.friends_id
AND r.status = "Current"