求一個sql語句.謝謝!!!

Abin-2008 2010-04-28 10:45:47

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個主要問題.
...全文
138 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
shine333 2010-05-03
  • 打赏
  • 举报
回复
你件一个problem_type,problem_is_main的索引,看看是不是速度上有所提高。
另外,你的数据多少行,我8192条测试数据,貌似零点几秒
Abin-2008 2010-05-03
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 shine333 的回复:]

我那个你看看,满足要求不
[/Quote]
你这个可以是可以,但是就是耗时间太久了吧....
可不可以用存储过程,帮我写一个呢? 谢谢
Abin-2008 2010-04-29
  • 打赏
  • 举报
回复
我要随机30条记录,但是在这30条记录中,必须保证 三种问题类型都要有,并且其中两种还必须包括有两题
主要题目.
ACMAIN_CHM 2010-04-29
  • 打赏
  • 举报
回复
mysql 中有沒有case這個寫法呢?

你自己查一下手册就可以看到了。
MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
[Quote]
用case

或者haveing?

不能實現嗎???[/Quote]
不能
wwwwb 2010-04-29
  • 打赏
  • 举报
回复
贴记录及要求结果出来看看
shine333 2010-04-29
  • 打赏
  • 举报
回复
我那个你看看,满足要求不
Abin-2008 2010-04-29
  • 打赏
  • 举报
回复
mysql 中有沒有case這個寫法呢?

用case

或者haveing?

不能實現嗎???
shine333 2010-04-29
  • 打赏
  • 举报
回复
偷换一下概念:
三种问题类型都要有,并且其中两种还必须包括有两题主要题目.
三种问题类型都要有,并且三种都必须包括有两题主要题目.
另外,如果题目真的“海量”的话,order by rand()还是很夸张的
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
) sub
where p.problem_id = sub.problem_id


x1, x2, x3,保证前6道题,1-main/2-main/3-main个2两道(通过ord=1保证)
x4取30道题(由于union all,怕和前6题重复,所以不是24),随机顺序,ord>=2
Abin-2008 2010-04-28
  • 打赏
  • 举报
回复
明天早上希望有人写出来了..o my lady gaga
Abin-2008 2010-04-28
  • 打赏
  • 举报
回复
頭大....如果我用存儲過程...我程序的數據庫備份恢復功能就不能用了
ACMAIN_CHM 2010-04-28
  • 打赏
  • 举报
回复
[Quote]sql語句不能搞定嗎???

用group by??[/Quote]

不能
Abin-2008 2010-04-28
  • 打赏
  • 举报
回复
sql語句不能搞定嗎???

用group by??
ACMAIN_CHM 2010-04-28
  • 打赏
  • 举报
回复
只能用程序或存储过程解决。在GOOGLE搜索一下出题程序,应该有不少。

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧