十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
SELECT和WHERE里面,遇到多表都有的名字,一定要使用表名以区别,电脑才知道你的命令,才能正确执行。
创新互联公司专注于宁夏企业网站建设,响应式网站开发,商城网站定制开发。宁夏网站建设公司,为宁夏等地区提供建站服务。全流程按需求定制制作,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
当SELECT后面的名字不重复的时候,多表都有的列但是只选了一份,在GROUP和ORDER里面可以不用加表名,计算机能够推断是哪个。
比如你有两个表 pre_first pre_second 并且你数据库配置文件已经配置了表前缀那么你可以这么写
$First=new \Think\Model("First");
//联表查询条件
$arrJoin=array(
"__SECOND__ as s on f.id=s.id ",
);
$list=$First-alias('f')-join($arrJoin,'LEFT')-select();
没有区别吧,如果表名过长,起别名可以简化sql语句,如果涉及一个表,就不用,在性能方面的影响微乎其微啊。
查询优化器首先先执行from子句,碰到表名有别名就直接使用了,而后面不是每次都解析的。
但是自身连接时必须使用两个别名。
thinkphp的关联模型,就是简化你的jion操作。所以,本质上,关联模型,就是处理表连接关系的。归根结底的,就是让你在用模型操作的时候,简化SQL查询的join操作。(是简化操作,而不是改变SQL语句。)
先举个例子。一个用户表,一个文章表。一个用户对应多篇文章。然后,你现在会经常出现如下需求:取得某人的文章记录,但是呢,只要求显示,用户名,文章名,文章ID,文章日期(其他的,比如,什么用户邮箱啊,用户密码啊,文章类型啊,文章修改日期啊,文章标签啊,你都不需要)这个时候,你就可以定义一个试图模型,然后在 $viewFields 里面,就可以把你经常使用需要调用的那个几个字段,按照thinkphp的规定,定义进去。
如下参考
class ArticleViewModel extends ViewModel {
public $viewFields = array(
'Article'=array('name','title'....其他字段),
'Author'=array('title'='category_name', '_on'='article.auid=author.id'),
'Article_class'=array(字段定义如上,具体规则,下面有介绍, '_on'=上面已经给你写了一个,这里其实就是写,article,和article_class 的主外键,对应关系。即JOIN ....ON..语句,ON部分的多内容),
'article_type'=array('field_realename'='field_alias'。这里就相当于查询语句SELECT 字段 字段的别名。这样的对应关系。)
);
}