可以新增個字段ip_flag來標記是否已經獲取過,沒有獲取是0,獲取了就是1. 查找的時候就是 SELECT * FROM ip WHERE ip_flag = 0 ORDER BY RAND() LIMIT 1; //如果數據只有1000個左右的話可以考慮ORDER BY RAND(),多的話就用PHP來隨機。 這樣的話就能隨機獲取到未獲取的數據了。
通过分页方式实现或者数组方式实现速度比较快。 数据量小的时候用上面老兄说的可以。 SELECT * FROM ip WHERE ip_flag = 0 ORDER BY RAND() LIMIT 1;数据量大的时候,百万以上。那就纠结死了。我就遇到过,用上面老兄的那个纠结啊。我用的是分页的方式。 比如分页方式。 1.先查询多少条,得出的值为$n; SELECT count(*) FROM ip WHERE ip_flag = 0; 2.每次取多少条数据(分页),为$pagesize 3.得到多少页 $pages; $pages=ceil($n/$pagesize); 4.随机页码 $page; $page=mt_rand(1,$pages); 5.随机页数 $offset $offset = $pagesize*($page-1); 6.取数据 SELECT * FROM ip WHERE ip_flag = 0 limit $offset, $pagesize
查找的時候就是
SELECT * FROM ip WHERE ip_flag = 0 ORDER BY RAND() LIMIT 1; //如果數據只有1000個左右的話可以考慮ORDER BY RAND(),多的話就用PHP來隨機。
這樣的話就能隨機獲取到未獲取的數據了。
数据量小的时候用上面老兄说的可以。
SELECT * FROM ip WHERE ip_flag = 0 ORDER BY RAND() LIMIT 1;数据量大的时候,百万以上。那就纠结死了。我就遇到过,用上面老兄的那个纠结啊。我用的是分页的方式。
比如分页方式。
1.先查询多少条,得出的值为$n;
SELECT count(*) FROM ip WHERE ip_flag = 0;
2.每次取多少条数据(分页),为$pagesize
3.得到多少页 $pages;
$pages=ceil($n/$pagesize);
4.随机页码 $page;
$page=mt_rand(1,$pages);
5.随机页数 $offset
$offset = $pagesize*($page-1);
6.取数据
SELECT * FROM ip WHERE ip_flag = 0 limit $offset, $pagesize