标题:
一句随机查询的 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