用php+mysql做一个题库系统,随机抽取五百题左右生成考试卷,最有效率的做法是什么?

用php+mysql做一个题库系统,随机抽取五百题左右生成考试卷,最有效率的做法是什么?,第1张

php里面有array_rand函数,你要是一道题一道题的读出来,或许也可以尝试一下。但是要是一下子都读出来,即便这个函数效率可以的话,随机取出id数组,查询 “where id in 数组” 就不如直接在数据库里随机抽取记录。\x0d\x0a如何从数据表里随机抽取记录呢,想想办法还是有一些,就是不知道效率如何。有的是说用max_id*rand(),那一条一条抽取还是可以的。怎么批量随机抽取呢,可以试着排序,然后选取前500题,排序可以想办法用一些函数(选取一些执行效率高的),如何md5,sha1,这种。如果为了使结果更具有随机性,可以把字段值再与一个随机数运算一下。仅供参考。\x0d\x0a========================\x0d\x0a我想你还是用array_rand随机抽500个id存到数组,然后遍历数组吧。这样也避免了题目重复。在数据库里如果一次一条记录随机抽取,要考虑碰巧重复的问题。批量选取你就按上面我说的试试。

一,判断题

1. 在 Linux 的安装过程中可进行网络配置. (对)

2. shell 是一个命令解释器. (对)

3. RedHat Linux 在它的发布版内没有捆绑 MySQL. (对)

4. Samba配置文件修改后,要重新用 testparm测试配置文件,不需要重启 Samba 服务器程序. (错)

5. Linux 不可以与 MS-DOS,OS/2,Windows 等其他 *** 作系统共存于同一台机器上.(错)

6. Linux 中的 ls 命令的功能是变换工作目录到目标指定目录.(错)

7. 通过 rpm –qa|grep vsftpd 命令可以检查系统是否已经安装了 vsftpd.(对)

8. 进入文本编辑器 vi 后,编辑后可文本模式下输入:q 退出 vi 环境.(错)

9. 登录系统的方式有两种:图形化登录和虚拟控制台登录.(对)

10. 可以在 shell 提示下或图形方式创建用户帐号.(对)

二,选择题

1.Samba服务器的主要功能是(C)

(A) Windows 主机间的资源能够共享

(B) 资源管理

(C) 使 Windows 用户以及 Linux 用户能够互相访问彼此的资源

(D) Linux 主机之间实现资源共享

2.在第一次启动时,mysql_install_db 脚本初始化 MySQL系统,这个脚本创建(A)两个数据库.

(A) mysql和 test (B) user 和 test (C) mysql 和 user

26

3.Linux 安装界面上有 3 个选项供用户选择,其中不含( A)

(A) 如果以图形化模式安装或升级 Linux,按 Enter 键.

(B)如果以文本模式安装或升级 Linux,输入:"Linux text",然后按 Ente

(C) 用列出的功能键来获取更多的信息.

(D) Setup 图标.

4 . 命 令 : Create table gb( Guestname char(12) not null, Email char(40), siteurl char(80))

中的作用为( C)

(A) 建立一个数据库名为 gb ,其字段名为 char char char text

(B) 建立一个数据库表,表名为 gb ,其字段名为 char char char text

(C) 建立一个数据库表,表名为 gb ,其字段名为 Guestname, Email,siteu

5.clear 命令的作用( A)

(A)清除终端窗口 (B)关闭终端窗口

(C)打开终端窗口 (D)调整窗口大小

6.使用命令 chmod 的数字设置,可以改变 ( C)

(A)文件的访问特权 (B)目录的访问特权 (C)文件/目录的访问特权

7. 在 shell 提示符下[root@redhat9 root]#/testparm 命令,可用于测试(B)

(A) smb.conf的正确性 (B) webapp.conf 的正确性

(C) vsftpd.conf 的正确性 (D) dhcpd.conf 的正确性

8.在提示符[root@redhat9 root]#从 root 帐号转为普通用户帐号使用(D )命令.

(A) su (B) us (C) su 用户名 (D) us 用户名

9.客户端访问 FTP 服务器的方法不含( D)

(A) text 访问 (B) 客户端 FTP 软件访问 (C) C/S访问 (D)浏览器访问

10.在 FTP 主配置文件 vsftpd.conf 中,每个选项设置为一行,格式为(B )

(A) "选项 =值" (B) "选项=值" (C) "选项 = 值" (D) "选项= 值"

建表和视图语句:

DROP TABLE IF EXISTS `tab`

CREATE TABLE `tab`  (

`id` int(11) NOT NULL AUTO_INCREMENT,

`userid` int(11) NULL DEFAULT NULL,

`date` datetime NULL DEFAULT NULL,

`instructions` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

`amount` decimal(18, 2) NULL DEFAULT NULL,

`type` tinyint(1) NULL DEFAULT NULL,

PRIMARY KEY (`id`) USING BTREE

) ENGINE = MyISAM AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic

create view tab_v  as

select

`tab`.`userid` AS `userid`,

date_format( `tab`.`date`, '%Y-%m' ) AS `ym`,

`tab`.`instructions` AS `instructions`,

`tab`.`amount` AS `amount`,

`tab`.`type` AS `type`

from

`tab`

查询语句:

select t0.userid       用户ID,

     t0.ym           年月,

     t1.cnt          本月收入笔数,

     t2.instructions 本月最大收入项目,

     t2.amount       本月最大收入金额,

     t3.instructions 本月最小收入项目,

     t3.amount       本月最小收入金额,

     t4.cnt          本月支出笔数,

     t5.instructions 本月最大支出项目,

     t5.amount       本月最大支出金额,

     t6.instructions 本月最小支出项目,

     t6.amount       本月最小支出金额,

     t7.cnt          本月结余

from (select distinct a.userid,

                      a.ym

        from tab_v a) t0

left join (select a.userid,

                  a.ym,

                  count(1) cnt

             from tab_v a

            where a.type = 2

            group by a.userid,

                     a.ym) t1

  on t0.userid = t1.userid

 and t0.ym = t1.ym

left join (select a.userid,

                  a.ym,

                  a.amount,

                  group_concat(b.instructions) instructions

             from (select a.userid,

                          a.ym,

                          max(a.amount) amount

                     from tab_v a

                    where a.type = 2

                    group by a.userid,

                             a.ym) a,

                  tab_v b

            where a.userid = b.userid

              and a.ym = b.ym

              and a.amount = b.amount

            group by a.userid,

                     a.ym,

                     a.amount) t2

  on t0.userid = t2.userid

 and t0.ym = t2.ym

left join (select a.userid,

                  a.ym,

                  a.amount,

                  group_concat(b.instructions) instructions

             from (select a.userid,

                          a.ym,

                          min(a.amount) amount

                     from tab_v a

                    where a.type = 2

                    group by a.userid,

                             a.ym) a,

                  tab_v b

            where a.userid = b.userid

              and a.ym = b.ym

              and a.amount = b.amount

            group by a.userid,

                     a.ym,

                     a.amount) t3

  on t0.userid = t3.userid

 and t0.ym = t3.ym

left join (select a.userid,

                  a.ym,

                  count(1) cnt

             from tab_v a

            where a.type = 1

            group by a.userid,

                     a.ym) t4

  on t0.userid = t4.userid

 and t0.ym = t4.ym

left join (select a.userid,

                  a.ym,

                  a.amount,

                  group_concat(b.instructions) instructions

             from (select a.userid,

                          a.ym,

                          max(a.amount) amount

                     from tab_v a

                    where a.type = 1

                    group by a.userid,

                             a.ym) a,

                  tab_v b

            where a.userid = b.userid

              and a.ym = b.ym

              and a.amount = b.amount

            group by a.userid,

                     a.ym,

                     a.amount) t5

  on t0.userid = t5.userid

 and t0.ym = t5.ym

left join (select a.userid,

                  a.ym,

                  a.amount,

                  group_concat(b.instructions) instructions

             from (select a.userid,

                          a.ym,

                          min(a.amount) amount

                     from tab_v a

                    where a.type = 1

                    group by a.userid,

                             a.ym) a,

                  tab_v b

            where a.userid = b.userid

              and a.ym = b.ym

              and a.amount = b.amount

            group by a.userid,

                     a.ym,

                     a.amount) t6

  on t0.userid = t6.userid

 and t0.ym = t6.ym

left join (select a.userid,

                  a.ym,

                  sum(case

                        when type = 1 then

                         -1 * a.amount

                        when 2 then

                         a.amount

                      end) cnt

             from tab_v a

            group by a.userid,

                     a.ym) t7

  on t0.userid = t7.userid

 and t0.ym = t7.ym

只能做到这个效果了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7492445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-06
下一篇 2023-04-06

发表评论

登录后才能评论

评论列表(0条)

保存