Board logo

标题: 一句随机查询的 SQL [打印本页]

作者: 迦楼罗    时间: 2006-4-6 10:35     标题: 一句随机查询的 SQL

有个enum类型的字段width  ,  具有N个值,现假设有100,200,300这三个值。  
现在要实现的效果是,随机查询三列,但必须是包括了这三个不同值的行。  
比如查询结果为:  
ID  width  
2    100  
15  200  
30  300  

ID是随机的,但是width必须不同而且有几个width提取几行,可能一句实现么?
作者: MaxFree    时间: 2006-4-6 10:35

是不是当你的width重复时只取一个ID咯,再进行随机取数  
这个应该先用随机对enum生成三个行数这三个数不重复,然后再做select语句
作者: 秋逸    时间: 2006-4-6 10:36

不对,不对。  

有几个width值,返回几行  

那不是和group  by  width一样了吗??
作者: cake    时间: 2006-4-6 10:38

我的mysql出了点问题,不能测试。只能说说思路  

GROUP  BY  width  可以满足“有几个值就提取几行”,但以最后出现的为准  
如  
15  200  
20  200  
则得到的是20  200  

DISTINCT(width)  也可以满足“有几个值就提取几行”,但以最先出现的为准  
如  
15  200  
20  200  
则得到的是15  200  

但这不能满足楼主的“随机查询”的要求  

所以需要先对表做随机排序然后再取  
由于mysql4.1.0以下不支持子查询,所以要使用临时表  
CREATE  TEMPORARY  TABLE  temp  SELECT  *  FROM  tbl_name  ORDER  BY  rand()  
SELECT  id,  DISTINCT(width)  FROM  temp
作者: lucky    时间: 2006-4-6 10:38

临时表存活期多长?  
存活于当前连接,关闭连接自动删除。  
phpmyadmin中不能使用,php编程即可  

如果不能一句完成,那还不如进行几个SQL查询每次返回一行啊  
是的,但你总得知道width到底有多少可能的取值,不能每修改一次表就修改一次程序吧?  

to  kingerq(多菜鸟)   
select  distinct(width)  from  table  group  by  rand()  limit  3;  
中按rand()  分组似乎说不通吧?能保证不丢失数据吗?  
假定  
id  width  rand()  
10  100      .01  
20  200      .5  
30  300      .01  
分组后10  100就不存在了




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0