日期:2014-05-16  浏览次数:20940 次

rand by order如何检索掉某些ID为空的数据条?
我有一个表,ID项自增,但是中间某些ID段曾经被删除过,所以总计29W条记录,最大的ID号是35W

现在用下面的语句随机,当ID号为某个数据库里已被删除的条目时,老是默认 ID = 22857 的记录(注:ID=14794 - ID=22856 已被删除)
SQL code

SELECT * FROM `my_table` AS r1 
JOIN (SELECT (FLOOR(RAND() * (SELECT MAX(id) FROM `my_table`))) AS id) AS r2 
WHERE r1.id >= r2.id
ORDER BY r1.id ASC 
LIMIT 1



加了 WHERE id!='NULL' AND id!='' 依旧没有效果,求助如何修改可以跳过不存在的ID?谢谢。
SQL code

SELECT * FROM `my_table` AS r1 
JOIN (SELECT (FLOOR(RAND() * (SELECT MAX(id) FROM `my_table` WHERE id!='NULL' AND id!=''))) AS id) AS r2 WHERE r1.id >= r2.id
ORDER BY r1.id ASC 
LIMIT 1



------解决方案--------------------
这样没办法,因为你的是整段的ID被清除 ID=14794 - ID=22856 这样不是平均分布,无法利用RAND随便来查询ID。 你需要用其它算法。如果你的表结果中是固定已知少了这一段,则可以跳过这一段。
------解决方案--------------------
如何重编 auto increase 的 ID号?
备份数据->清空表->ALTER TABLE dd AUTO_INCREMENT = 1->导入数据
------解决方案--------------------
引用汗~~问题是我的表少的不止这一段,万能的狼头大哥,其它算法是指什么?有没有可用的代码?

------解决方案--------------------
如果这个表中的ID与其它表没有关联,则可以使用这种方法。