本帖最后由 sw08 于 2011-7-13 23:03 编辑
以下的若干小问题来源于我这几年编写插件的实战经历,基本上都花了我不少时间来处理。现在换作你们,看看你们有没有什么好方法解决这些问题。其实我想说的是,做单一的功能插件简单,但是做个涉及复杂数据处理的插件那真是浪费脑力的。也希望大家能多关注下这方面的学习,对优化插件算法都是有很大的帮助的。
编程语言:PHP
数据库:SQL
以下问题均允许使用Discuz!定义的函数或模块功能
注意,不允许用下面的操作来处理:加额外的数据库字段来存储,使用单独的数据文件来读写
问题1:
在一个数据表中存放有uid,typeid,value,action
uid是用户的uid;typeid是分类标识(类型为整数型);value是对应的值;action是操作行为标识
假设有下面的数据
uid typeid action value
1 1 buy 20
1 1 buy 5
1 2 sell 20
2 1 buy 30
3 1 buy 40
3 2 sell 50
4 1 buy 35
4 2 sell 15
我想要下面的结果
做个排行榜,根据不同的typeid来分行为(buy,sell)来对同一用户的value求和,并对用户的value降序排列
例如是下面的结果
排名 typeid 用户UID 行为 总和
1 1 3 buy 40
2 1 1 buy 35
3 1 4 buy 35
4 1 2 buy 30
排名 typeid 用户UID 行为 总和
1 2 3 sell 50
2 2 1 sell 20
3 2 4 sell 15
问题来源于开发积分交易市场排行榜
问题2:
请编程输出下面的矩阵,要求体现出来对循环语句的使用技巧。for循环最多允许使用两次。
其中n由用户给定。
n=2
XXOO
XXOO
OOXX
OOXX
n=3
XXXOOOXXX
XXXOOOXXX
XXXOOOXXX
OOOXXXOOO
OOOXXXOOO
OOOXXXOOO
XXXOOOXXX
XXXOOOXXX
XXXOOOXXX
问题来源于开发数独插件的时候
问题3:
Discuz! X2.0把附件信息分了10个表,分别是forum_attachment_0 ~ forum_attachment_9来存放论坛附件信息,我现在想统计用户在某一天累计上传的附件的流量,但是直接查10个数据表是肯定会让系统不负重堪的。
现在问你,怎么合理的处理这个问题,既不用查10个表浪费大量系统资源,但又可以得到比较好的结果。
问题来源于开发工资插件的时候
问题4:
假设有个多选题,选项的个数由用户设定(未知),各个选项的值分别是1,2,3,4...n
我希望对于某种特定的表单提交结果给予特定的分数
例如说,问题是 你最喜欢的字母是:
选项从 A到E
完整的答案是A,C,D,E
好的,我要求全选对的得10分,选错的没有分数,少选但选对的,少选一个减2分,扣完为止。例如我选了A,D,E,可以得到8分。
选项个数由用户给出,假设用变量$n给出,标准答案保存在变量$answer中,标准格式是 A,B,D,E(中间用逗号隔开)
问题来源于开发问卷插件的时候
问题5:
计划任务延迟执行是很讨厌的事情,不过在不得不接受这个事实的前提下,如何用计划任务准确统计出相对于执行的时间,用户在昨天的发帖量?
提示,这个问题有个陷阱,是以前一直被人忽视的问题。希望作者在编写插件的时候能注意到类似这样的问题。
问题来源于开发工资插件的时候
|