列表sql优化 (子查询,表连接)

14 篇文章 0 订阅

在列表页面的时候 可能会用到 表的左右连接
在我写sql语句的时候
会避免 “两个或者多个表全部的表数据进行连接,然后在查出10条 .”
或者是 “先读取一张表取10条数据 ,然后进行for或者foreach的 循环查询 查询这10条”
而是进行 子查询查出这10条然后去管理另一张表

tp 的写法

/* 先查出一个表的 10条*/
$subQuery = M('usb')
    ->where($map)
    ->limit($page->firstRow , $page->listRows)
    ->field('id,name')
    ->buildSql();
/* 然后继续左链接 */
$list = $user
    ->table($subQuery.'B')
    ->join('LEFT JOIN `user` AS A ON A.id = B.id')
    ->field('A.`id` AS user_id,A.`name` AS user_name,B.`id`,B.`name`')
    ->select();

sql 语句

SELECT
    t.`user_name`,r.`name` as region_name
FROM (
    SELECT
        `id`,
        `name` as user_name ,
        `region_id`
    FROM  
        user
    WHERE 
        LIMIT 0,10

) as t 

LEFT JOIN region as r 

on r.id = t.region_id;

如果你有更好的逻辑思路可以给我留言~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值