shell脚本 - 完成商品销量排行的统计:倒插数据库法

思考几个问题?
真实系统中
1.商品表一般都说很大的
2.订单表更大(尤其是订单明细表)
所以如果动态的去去商品销量排行是很耗费性能的,因此常见的实战做法有几种:

常见做法1:
做个后台,有个按钮,人工点击,自动执行”销量排行SQL”,然后生成一个静态文件(可以是直接的HTML文件,也可以把取出的结果集序列化后保存)或放到memcache里,每个1时或指定的时间重新更新

常见做法2:
使用shell调用mysql客户端完成

mysql -u root -p123123 - e "sql语句"

由于sql语句太长,我们往往会把sql保存到单独的文件里

mysql -u root -p123123 < sql文件名

步骤:

vi product_sort.sh

mysql="/usr/local/mysql/bin/mysql"
sql_file="/home/prod_sort.sql"
$mysql -u root -p123123 < $sql_file 

执行这个shell脚本(先要给权限 chmod +x product_sort.sh):

./product_sort.sh

会输出sql查询的结果集(包含列头)
如果不需要显示列头,shell脚本里应该这样写:

mysql="/usr/local/mysql/bin/mysql"
sql_file="/home/prod_sort.sql"
$mysql -u root -p123123 < $sql_file  -N

完成上一步后,我们再使用awk命令只取出商品id,然后拼接这些id,写入到特定的表里。
以后我们去商品排行,就直接去该表取出相应的字段

mysql="/usr/local/mysql/bin/mysql"
sql_file="/home/prod_sort.sql"
getids=`$mysql -u root -p123123 < $sql_file  -N | awk 'BEGIN{ids="";s=","}{ids=$1""s""ids}END{print ids""0}'`
update_sql="update dbname.sys_cache set cache_value='$getids' where cacahe_key='sale_sort'"
echo $update_sql | $mysql -u root -p123123

如需判断shell里update是否成,需要在后面加入:

if [ $? -eq 0 ];then
    echo 'ok'
else
    echo 'error'
fi  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值