リストsql最適化(サブクエリ、テーブル接続)
リストページで表の左右の接続を使うかもしれませんが、sql文を書くときは「2つ以上の表のすべての表データを接続し、10個検出する」ことを避けます.あるいは、「1枚のテーブルを読み込んで10個のデータを取り、forまたはforeachのループクエリを行い、この10個をクエリする」のではなく、サブクエリを行い、この10個を検出して別のテーブルを管理します.
tpの書き方
sql文
もしあなたがもっと良い論理的な考えがあれば、私にメッセージを残してください.
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;
もしあなたがもっと良い論理的な考えがあれば、私にメッセージを残してください.