Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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 MySQL连接查询更多表并在一次选择中返回更多结果_Php_Mysql_Innodb - Fatal编程技术网

Php MySQL连接查询更多表并在一次选择中返回更多结果

Php MySQL连接查询更多表并在一次选择中返回更多结果,php,mysql,innodb,Php,Mysql,Innodb,我会问,对不起,我的英语不好:( 我有多张桌子 CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(50) COLLATE utf8_slovak_ci NOT NULL, `password` varchar(200) COLLATE utf8_slovak_ci NOT NULL, `status` tinyint(1) NOT NULL, PRIM

我会问,对不起,我的英语不好:(

我有多张桌子

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(50) COLLATE utf8_slovak_ci NOT NULL,
  `password` varchar(200) COLLATE utf8_slovak_ci NOT NULL,
  `status` tinyint(1) NOT NULL,
  PRIMARY KEY (`id`,`username`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_slovak_ci;


CREATE TABLE `user_acl` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `id_user` int(11) unsigned NOT NULL,
  `group` smallint(5) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COLLATE=utf8_slovak_ci;


CREATE TABLE `user_profil` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `email` varchar(100) COLLATE utf8_slovak_ci NOT NULL,
  `fullname` varchar(100) COLLATE utf8_slovak_ci NOT NULL,
  `profil` text COLLATE utf8_slovak_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_slovak_ci;
查询:

SELECT user.*, prf.*, acl.*
FROM (SELECT * FROM user LIMIT 1) AS user
LEFT JOIN user_acl AS acl ON (acl.id_user = user.id)
INNER JOIN user_profil AS prf ON (user.id = prf.id)
我有表
user
user\u acl
user\u profile

user
user\u profile
id
什么是公共键下索引


user\u acl
具有
id\u user
公用键和表
user
(id)在表中,但
user\u acl
表中有更多行
user
,我需要在一个查询中使用表
user\u acl
中的所有行。

您不能。如果需要将多个acl行与一个用户行分开,则必须单独进行查询。
[编辑]:但如果您需要使用一个查询来创建它,那么您应该使用某种位操作。

您不能。如果您需要将多个acl行与一个用户行分开,则必须将查询分开。
[编辑]:但是如果您需要使用一个查询来编辑它,那么您应该使用某种位操作。

您可以让MySQL使用
GROUP\u CONCAT将多行中的值合并到一行中:

SELECT user.*, prf.*, GROUP_CONCAT(acl.id), GROUP_CONCAT(acl.group) 
FROM user 
LEFT JOIN user_acl AS acl ON (acl.id_user = user.id) 
INNER JOIN user_profil AS prf ON (user.id = prf.id) 
GROUP BY user.id;

您可以使用
GROUP\u CONCAT
,让MySQL将多行中的值组合成一行:

SELECT user.*, prf.*, GROUP_CONCAT(acl.id), GROUP_CONCAT(acl.group) 
FROM user 
LEFT JOIN user_acl AS acl ON (acl.id_user = user.id) 
INNER JOIN user_profil AS prf ON (user.id = prf.id) 
GROUP BY user.id;

我不确定我是否理解,因为我测试了这个,它似乎工作了。我现在只需要查询返回一行,这取决于
user\u acl
中是否有行,你的意思是希望所有
acl
行显示在一行中吗?现在在PHP foreach中使用($db->Select($sql)as$value){if(isset($users[$value['id'])]['group']){$value['group']=$users[$value['id']['group'],'.$value['group'];}$users[$value['id']]=$value;}“您的意思是希望所有acl行显示在一行中吗?”是的,我不确定我是否理解,因为我测试了这个,它似乎起了作用。我现在只需要查询返回一行,这取决于
user\u acl
中是否有行。你的意思是希望所有
acl
行显示在一行中吗?现在在PHP foreach中使用($db->Select($sql)as$value){if(isset($users[$value['id')]['group']){$value['group']=$users[$value['id']]['group'],'.$value['group'];}$users[$value['id']]=$value;}“你的意思是想让所有acl行显示在一行中吗?”是的,非常感谢。这确实帮助了我,我也学会了另一个重要的命令。再次感谢:)是的,非常感谢。这真的帮助了我,我学会了另一个重要的命令。再次感谢:)