Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何根据联接数组的值为内部联接表选择列_Php_Mysql_Json - Fatal编程技术网

Php 如何根据联接数组的值为内部联接表选择列

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` (

我在本地服务器上用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` (
  `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"