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

在列表页面的时候 可能会用到 表的左右连接
在我写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;

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

你可能感兴趣的:(MYSQL,PHP)