繁体   English   中英

MySQL JOIN一键查询更多表并返回更多结果

[英]MySQL JOIN query more tables and return more result in one select

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

我有多个桌子

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)

我有表useruser_acluser_profil

useruser_profilid下被索引什么是公用键

user_acl与表中的表user (id)具有id_user公用键,但是user_acluser有更多行,我需要在一个查询中使用表user_acl中的所有行。

您可以使用GROUP_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;

你不能 如果一个用户行需要多个acl行,则必须分开查询。 [编辑]:但是,如果您需要使用一个查询进行查询,则应使用某种按位运算。 http://codingrecipes.com/how-to-write-a-permission-system-using-bits-and-bitwise-operations-in-php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM