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没有达到我的目标  
有没有大神可以指教一下呢?

解决方案 »

  1.   

    mysql> Select id, name ,val,memo from (select * from tb order by rand())t group by name  limit 0,30 ;
    +----+------+------+------+
    | 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   |
    +----+------+------+------+
      

  2.   

    参考下贴中的多种方法http://blog.csdn.net/acmain_chm/article/details/4126306
    [征集]分组取最大N条记录方法征集,及散分....