2015-03-15 4 views
0

У меня есть таблица URL-адресов. Мне нужно выбрать 1, в круговом режиме. В надежде отобразить 1 за просмотр страницы ИЛИ за посетителя и показать каждые 20 раз, если у меня есть 100 просмотров страниц или посетителей.MySQL Round Robin Select

По существу: 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 | 
+-------+---------------------+ 
+0

Не очищайте свой вопрос, пожалуйста, объяснить с ожидаемым выходом. – Sadikhasan

+0

«в round robin» означает id 1, затем более поздний id 2, а затем id 3 ... и т. Д. Для конкретного пользователя? Вам нужно будет сохранить последний элемент, отображаемый против пользователя. –

+0

@Sadikhasan 'SELECT * FROM table LIMIT 1' Но 1 запись должна быть выбрана по очереди. – webaholik

ответ

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; 

Store (в сессии, файл, другая таблица и т. д.) и передать вашему запросу последний отображаемый id или 0 для исходного запроса.

Это даст вам следующую строку или первый раз, если вы достигли последней. Этот запрос будет работать, если у вас есть пробелы в id.

Вот SQLFiddle демо

+0

Это выглядит многообещающе, я проверю его сегодня. – webaholik

+0

@webaholik Как прошел тест? – peterm

+0

Отлично, спасибо! – webaholik

1

Вы можете использовать RAND() функцию в пункте ORDER BY:

SELECT * FROM tableName ORDER BY RAND() LIMIT 1 

Является ли это то, что вы хотите достичь?

+0

Лучшее решение! Однако я хотел бы гарантировать равное количество выборок для каждой записи. – webaholik

2

Вы можете сделать, используя order by rand()

SELECT * FROM table ORDER BY rand() LIMIT 1