MySQL Round Robin Select

时间:2015-03-15 03:19:06

标签: php mysql

我有一张网址表。我需要循环选择1。希望每次浏览显示1次或每位访客显示1次,如果我有100次网页浏览或访问者,则每次显示20次。

基本上:SELECT url FROM table LIMIT 1(轮流)

+-------+---------------------+
| id    | url                 |
+-------+---------------------+
|     1 | http://google.com   |
|     2 | http://yahoo.com    |
|     3 | http://ebay.com     |
|     4 | http://anything.com |
|     5 | http://other.com    |
+-------+---------------------+

3 个答案:

答案 0 :(得分:3)

如果我正确理解循环法的含义,那么你可以按照

的方式做一些事情
SELECT id, url
  FROM urls u CROSS JOIN
(
  SELECT MIN(id) min_id, MAX(id) max_id
    FROM urls
) m 
 WHERE id > IF(? >= max_id, 0, ?) -- last shown id goes here instead of placeholders
 ORDER BY id
 LIMIT 1;

存储(在会话,文件,另一个表等中),并将最后显示的id或0传递给查询。

如果你到达最后一行,这将给你下一行或第一行。 如果您在id s。

中存在空白,此查询仍然有效

这是 SQLFiddle 演示

答案 1 :(得分:2)

您可以使用order by rand()

SELECT * FROM table ORDER BY rand() LIMIT 1

答案 2 :(得分:1)

您可以在ORDER BY子句中使用RAND()函数:

SELECT * FROM tableName ORDER BY RAND() LIMIT 1

这是你想要达到的目标吗?