读书人

求一sql句.!解决办法

发布时间: 2012-04-23 13:17:38 作者: rapoo

求一sql句.!!!

SQL code
problems  CREATE TABLE `problems` (                                                              `problem_id` bigint(11) NOT NULL auto_increment COMMENT '问题表 ID',                 `problem_type` int(1) NOT NULL COMMENT '问题类型 1.理论题,2实践题',                  `problem_title` varchar(200) NOT NULL COMMENT '问题',                                `problem_option_a` varchar(100) default NULL COMMENT 'A 选项',                       `problem_option_b` varchar(100) default NULL COMMENT 'B 选项',                       `problem_option_c` varchar(100) default NULL COMMENT 'C 选项',                       `problem_option_d` varchar(100) default NULL COMMENT 'D 选项',                       `correct_answer` int(1) default '0' COMMENT '正确选项 1.A,2.B,3.C,4.D',              `problem_is_main` int(1) default '1' COMMENT '是否主要 1不是 2 是',                  `problem_image` varchar(200) default NULL COMMENT '问题图片路径',                    `problem_remark` text COMMENT '描述',                                                PRIMARY KEY  (`problem_id`)                                                        ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=gbk   

我要得到表的30,但是型三都要有,而且要保其中的里
有2主要.

[解决办法]
只能用程序或存储过程解决。在GOOGLE搜索一下出题程序,应该有不少。
[解决办法]
偷换一下概念:
三种问题类型都要有,并且其中两种还必须包括有两题主要题目.
三种问题类型都要有,并且三种都必须包括有两题主要题目.
另外,如果题目真的“海量”的话,order by rand()还是很夸张的
SQL code
select p.* FROM problems p,( SELECT DISTINCT problem_id   FROM( SELECT problem_id,        1 AS ord   FROM (SELECT problem_id           FROM problems          WHERE problem_type = 1            AND problem_is_main = 1          ORDER BY rand()          LIMIT 2) x1  UNION ALL SELECT problem_id,        1 AS ord   FROM (SELECT problem_id           FROM problems          WHERE problem_type = 2            AND problem_is_main = 1          ORDER BY rand()          LIMIT 2) x2  UNION ALL SELECT problem_id,        1 AS ord   FROM (SELECT problem_id           FROM problems          WHERE problem_type = 3            AND problem_is_main = 1          ORDER BY rand()          LIMIT 2) x3  UNION ALL SELECT problem_id,        ord   FROM (SELECT problem_id,                rand() + 2 AS ord           FROM problems          ORDER BY ord          LIMIT 30) x4  ORDER BY ord) x  ORDER BY ord  LIMIT 30) subwhere p.problem_id = sub.problem_id 

读书人网 >Mysql

热点推荐