让我结合PHP+Mysql完成对需求代码的思路讲解和编写。
有三个表
user(用户表) -uid -name -Hp
mechine(商品表) -mid -name -price
order(订单表) -oid -mid -uid -time需求:最近一个月,购买商品总价值最高的前10个用户。因为我自己学PHP以后,先是用Laravel框架,后来用的TP框架,思路也比较局限了。
我给出的是三个表联查,将一个月做为where条件来检索,sum(price)然后根据uid来group聚合
order(‘num’,desc)思路大概就是三表联查一条语句,面试官没有直接否定我,问了我这样是不是效率和性能都不会很好。
想请教一下~怎么样能优化的更好。
自己有想法也会跟进的。
有三个表
user(用户表) -uid -name -Hp
mechine(商品表) -mid -name -price
order(订单表) -oid -mid -uid -time需求:最近一个月,购买商品总价值最高的前10个用户。因为我自己学PHP以后,先是用Laravel框架,后来用的TP框架,思路也比较局限了。
我给出的是三个表联查,将一个月做为where条件来检索,sum(price)然后根据uid来group聚合
order(‘num’,desc)思路大概就是三表联查一条语句,面试官没有直接否定我,问了我这样是不是效率和性能都不会很好。
想请教一下~怎么样能优化的更好。
自己有想法也会跟进的。
如要将压力转嫁给 php 的话,那要数据库做什么?
版主大大 前几天处理数据时有个需求自己不会写 百度以后看到您之前回复别人的
$res = array();
foreach($data as $val) {
if(! isset($res[$val['approval_id']]))
$res[$val['approval_id']] = $val;
else $res[$val['approval_id']]['apperson_id'] .= ',' . $val['apperson_id'];
}
$res = array_values($res);=-= 能简单给我讲一下不 这个if 和else 的用法 没见到过 不理解阿
你的表结构,索引设计好就可以了。select uid from `order` as a left join mechine as b on a.mid=b.mid where a.time>time()-2592000 group by a.uid order by sum(b.price) desc limit 10;
关于mysql 索引 还有 事务这些 表优化方面的 有什么推荐看的书啥的不 ... 都没有实际用过 , 有的使用场景都不知道..然后 有时候用框架用的 原生的感觉都不会写了=-=
版主大大 前几天处理数据时有个需求自己不会写 百度以后看到您之前回复别人的
$res = array();
foreach($data as $val) {
if(! isset($res[$val['approval_id']]))
$res[$val['approval_id']] = $val;
else $res[$val['approval_id']]['apperson_id'] .= ',' . $val['apperson_id'];
}
$res = array_values($res);=-= 能简单给我讲一下不 这个if 和else 的用法 没见到过 不理解阿 if...esle...后面只有一行代码,就可以省略花括号了 也可以用 ...?... : ...
版主大大 前几天处理数据时有个需求自己不会写 百度以后看到您之前回复别人的
$res = array();
foreach($data as $val) {
if(! isset($res[$val['approval_id']]))
$res[$val['approval_id']] = $val;
else $res[$val['approval_id']]['apperson_id'] .= ',' . $val['apperson_id'];
}
$res = array_values($res);=-= 能简单给我讲一下不 这个if 和else 的用法 没见到过 不理解阿 if...esle...后面只有一行代码,就可以省略花括号了 也可以用 ...?... : ...
真的可以用阿!
微 jip0303 具体聊
mechine(商品表) -mid -name -price
order(订单表) -oid -mid -uid -time -price(需要保存订单表, 不然产品改价格, 你怎么玩???)select o.uid, sum(o.price ) sprice from `order` o left join user u on u,uid=o.uid left join mechine m on m.mid=o.mid
group by o.uid然后排序什么的,(sql 不完善,可能有错, 自行补充下吧)
如果 很多的话, 你要取前10条,可以先提取 订单最多的1000个客户的id, 在group by, 查询, 虽然不太准确, 但是可以提高速度, 1000个uid group 速度应该不会太坑, (有几百万上千万用户的话)