• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

【ThinkPHP】交表 RelationModel 查询效率有关问题(1表交7表 查询效率有关问题)

php 搞代码 3年前 (2022-01-24) 10次浏览 已收录 0个评论

【ThinkPHP】交表 RelationModel 查询效率问题(1表交7表 查询效率问题)

本帖最后由 default7 于 2014-05-19 12:21:36 编辑

ThinkPHP 版本 3.1.3,做一个信息平台,类似 http://www.35dalu.com/info 这个网站 。

有表如下:
1)info(tid,title,uid,d1,d2,d3,c1,c2,c3,status,date1,date2)
2)member(uid,uname)
3)cat(id,name,level)
4)diqu(id,name,level)

对应关系:
info.uid=member.uid
info.d1=diqu.id & diqu.level=1
info.d2=diqu.id & diqu.level=2
info.d3=diqu.id & diqu.level=3
info.c1=cat.id & cat.level=1
info.c本文来源gao@!dai!ma.com搞$$代^@码!网!搞gaodaima代码2=cat.id & cat.level=2
info.c3=cat.id & cat.level=3

现需要查询列表数据,主表info会交表另外的3个表(实际上算起来是交7个表),用ThinkPHP的RelationAction。

<br />		//by default7#zbphp.com Index/Info<br />		$obj = D('Info');<br />		$this->info = $obj->where('status=1')->order('date2 DESC')->limit(60)->relation(true)->field('tid,title,d1,d2,uid')->select();<br />		dump($obj->getLastSql());<br />		dump('total sql query count:'.N('db_query')); //居然SQL 查询多大367条!<br />

但发现执行的SQL是如下的拆分一条条的运算的,SQL记录截图:

ThinkPHP执行的原理是先在Info表查询数据,然后再用PHP去一个个查询再数组加进去?
很疑问的是 这样不会非常影响效率吗?如何优化查询?可否自己定义SQL查询(by default7#zbphp.com)

——解决方案——————–
你最近TP的问题比较多哦。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:【ThinkPHP】交表 RelationModel 查询效率有关问题(1表交7表 查询效率有关问题)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址