mysql - 请教 一个表里有3个不同的用户id 如何通过联用户表的方式 取出这三个用户名呢
PHPz
PHPz 2017-04-17 11:24:55
[MySQL讨论组]

RT:

大致场景是这样,我有一个app表

SQL code

CREATE TABLE IF NOT EXISTS `ch_app` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `appname` varchar(100) NOT NULL COMMENT 'app名称',
  `appenname` varchar(50) NOT NULL COMMENT 'APP名称英文首字母',
  `tid` mediumint(5) NOT NULL COMMENT 'app分类',
  `uid` int(11) NOT NULL COMMENT '商务经理',
  `manager` int(11) NOT NULL COMMENT '渠道经理',
  `channel_id` int(11) NOT NULL default '0' COMMENT '渠道商',
  `reference` varchar(30) NOT NULL COMMENT 'app来源',
  `package_name` varchar(255) NOT NULL COMMENT 'app包名',
  `juwan_id` int(11) NOT NULL default '0' COMMENT '聚玩appid',
  `downloadurl` varchar(255) NOT NULL COMMENT 'app下载路径',
  `commission` enum('1','2') NOT NULL COMMENT '佣金类型:1,CPA;2:CPS',
  `commissionval` decimal(8,2) unsigned NOT NULL default '0.00' COMMENT '佣金值',
  `size` decimal(10,3) NOT NULL COMMENT '大小',
  `system` enum('1','2') NOT NULL default '1' COMMENT '系统要求:1,android;2,ios',
  `sort` int(11) NOT NULL default '0' COMMENT '排序',
  `details` varchar(500) NOT NULL COMMENT '详细信息',
  `edituptime` int(11) NOT NULL COMMENT '更新时间',
  `appuptime` int(11) NOT NULL COMMENT 'app安装包更新时间',
  `flag` tinyint(1) NOT NULL COMMENT 'app状态:0,未上架;1,上架;2,下架',
  PRIMARY KEY  (`id`),
  KEY `app_enname` (`appenname`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='app管理表' AUTO_INCREMENT=13 ;


和用户表:

SQL code

CREATE TABLE IF NOT EXISTS `ch_user` (
  `uid` int(11) NOT NULL auto_increment,
  `username` varchar(50) default NULL,
  `password` varchar(50) default NULL,
  `group` tinyint(2) default NULL COMMENT '用户组',
  `manager` int(11) default NULL COMMENT '渠道经理',
  `accounttype` tinyint(2) default NULL COMMENT '账户属性',
  `realname` varchar(50) default NULL COMMENT '真实姓名',
  `telephone` bigint(12) default NULL COMMENT '固定电话',
  `mobilephone` bigint(12) default NULL COMMENT '移动电话',
  `qq` int(11) default NULL COMMENT 'QQ号码',
  `company_name` varchar(100) default NULL COMMENT '公司名称',
  `company_simple_name` varchar(20) default NULL COMMENT '公司简称',
  `company_address` varchar(100) default NULL COMMENT '通信地址',
  `company_zipcode` int(7) default NULL COMMENT '邮政编码',
  `bank_name` varchar(100) default NULL COMMENT '开户银行',
  `bank_address` varchar(100) default NULL COMMENT '开户银行地址',
  `bank_account` varchar(50) default NULL COMMENT '银行账户',
  `bank_username` varchar(50) default NULL COMMENT '开户名称',
  PRIMARY KEY  (`uid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;

我现在想通过联表方式 取出所有app表中数据及uid,manager,channel_id所对应的user表中的username或者realname

请问该怎么实现呢,或者说表设计要怎么改呢

PHPz
PHPz

学习是最好的投资!

全部回复(1)
阿神

首先,你目前的两个表设计是有优化的余地的
ch_app表里,诸如details这类字段,本身占用的磁盘空间很大,但是在查询中使用到的几率不高,你可以考虑把这些字段分表,减低磁盘io,对于提升查询效率帮助很大

ch_user表里,你也可以分拆成两个表,假设表里面有一部分字段是不会被经常使用的。

以上通过分表的方式,能明显提升sql查询效率,当然在业务上增加了复杂度。

其次,我个人习惯是,尽量避免使用关联查询,比如你题目中查出app表数据,通过uid查询用户信息
可以查出uid,在程序里单独去查询用户信息
这么做的好处就是,在你需要扩展的时候,比如使用redis memchaced等,不需要对现有代码做太大改变
缓存命中率也很高
总之,我个人推荐分开查询

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号