MYSQL如何随机读取多个分类中的某一条数据??
例如:
数据表
id name val memo
1 a 2 a2
2 a 1 a1
3 a 3 a3
4 b 1 b1
5 b 3 b3
6 b 2 b2
7 c 1 c1
8 c 2 c2我想要查找的是 从a,b,c 类中各找出一条数据,但是从a中取出的一条数据是随机的,b,c中取出的数据也是随机的一条,要如何做呢?
这是创建表的SQL代码CREATE TABLE IF NOT EXISTS `tb` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(10) default NULL,
`val` int(11) default NULL,
`memo` varchar(20) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;--
-- 转存表中的数据 `tb`
--INSERT INTO `tb` (`name`, `id`, `val`, `memo`) VALUES
('a', 1, 2, 'a2'),
('a', 2, 1, 'a1'),
('a', 3, 3, 'a3'),
('b', 4, 1, 'b1'),
('b', 5, 3, 'b3'),
('b', 6, 2, 'b2'),
('c', 7, 1, 'c1'),我使用了 distinct ,但是却不能完全实现,因为distinct就却除重复值,只是将同为a类的三个值取第一个而已 我需要的是同为a类的值取值可以随机的
使用命令:
Select id,distinct(name),val,memo from tb group by name order by rand() limit 0,30
得到的结果是:name id val memo
a 1 2 a2
c 7 1 c1
b 4 1 b1没有达到我的目标
有没有大神可以指教一下呢?
例如:
数据表
id name val memo
1 a 2 a2
2 a 1 a1
3 a 3 a3
4 b 1 b1
5 b 3 b3
6 b 2 b2
7 c 1 c1
8 c 2 c2我想要查找的是 从a,b,c 类中各找出一条数据,但是从a中取出的一条数据是随机的,b,c中取出的数据也是随机的一条,要如何做呢?
这是创建表的SQL代码CREATE TABLE IF NOT EXISTS `tb` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(10) default NULL,
`val` int(11) default NULL,
`memo` varchar(20) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;--
-- 转存表中的数据 `tb`
--INSERT INTO `tb` (`name`, `id`, `val`, `memo`) VALUES
('a', 1, 2, 'a2'),
('a', 2, 1, 'a1'),
('a', 3, 3, 'a3'),
('b', 4, 1, 'b1'),
('b', 5, 3, 'b3'),
('b', 6, 2, 'b2'),
('c', 7, 1, 'c1'),我使用了 distinct ,但是却不能完全实现,因为distinct就却除重复值,只是将同为a类的三个值取第一个而已 我需要的是同为a类的值取值可以随机的
使用命令:
Select id,distinct(name),val,memo from tb group by name order by rand() limit 0,30
得到的结果是:name id val memo
a 1 2 a2
c 7 1 c1
b 4 1 b1没有达到我的目标
有没有大神可以指教一下呢?
+----+------+------+------+
| id | name | val | memo |
+----+------+------+------+
| 1 | a | 2 | a2 |
| 6 | b | 2 | b2 |
| 7 | c | 1 | c1 |
+----+------+------+------+
3 rows in set (0.00 sec)mysql> Select id, name ,val,memo from (select * from tb order by rand())t group by name limit 0,30 ;
+----+------+------+------+
| id | name | val | memo |
+----+------+------+------+
| 2 | a | 1 | a1 |
| 4 | b | 1 | b1 |
| 7 | c | 1 | c1 |
+----+------+------+------+
3 rows in set (0.01 sec)mysql> Select id, name ,val,memo from (select * from tb order by rand())t group by name limit 0,30 ;
+----+------+------+------+
| id | name | val | memo |
+----+------+------+------+
| 3 | a | 3 | a3 |
| 6 | b | 2 | b2 |
| 7 | c | 1 | c1 |
+----+------+------+------+
[征集]分组取最大N条记录方法征集,及散分....