2016-04-01 2 views
0

Я пытаюсь отобразить ровно 6 случайных «развлекательных» записей, но с моим текущим запросом он получает случайное число от 1 до 6 и отображает это количество записей. Как обновить этот запрос, чтобы он отображал точно 6 случайных записей развлечения из моей таблицы статей? Вот мой текущий запрос:Отображение точно 6 случайных записей из таблицы

SELECT 
    r1.* 
FROM 
    Articles AS r1 
    INNER JOIN (SELECT(RAND() * (SELECT MAX(id) FROM Articles)) AS id) AS r2 
WHERE 
    r1.id >= r2.id 
    AND r1.category = 'entertainment' 
LIMIT 6; 

В таблице структура выглядит следующим образом:

table Articles 
- id (int) 
- category (varchar) 
- title (varchar) 
- image (varchar) 
- link (varchar) 
- Counter (int) 
- dateStamp (datetime) 
+0

Вы можете предоставить нам некоторое представление о вашей структуре стола. Каковы соответствующие столбцы и для чего стоит таблица 'r1'? – Pevara

+0

@Pevara У меня есть 7 столбцов в таблице «Статьи». id (уникальная), категория (категория статьи, т. е. развлечения), название (название статьи), изображение (URL-адрес изображения статьи), ссылка (URL-адрес статьи), счетчик (количество просмотр статьи), dateStamp (дата публикации статьи). – user2896120

ответ

1

Try:

SELECT 
    r1.* 
FROM 
    Articles AS r1 
WHERE 
    r1.category = 'entertainment' 
ORDER BY RAND() 
LIMIT 6; 

Я думаю, что это то, что вы пытались с помощью подзапроса?

+0

Я пытаюсь не использовать ORDER BY RAND() из-за того, что он неэффективен с производительностью – user2896120

+0

Вы пробовали http://stackoverflow.com/questions/6541644/selecting-random-rows-with-mysql/6542113#6542113? – Tom

+0

'ORDER BY RAND()' действительно не очень хорошо масштабируется, но если вы не ожидаете иметь тысячи статей, я подозреваю, что это будет непростительно. И я большой поклонник по возможности держать вещи по возможности ... – Pevara

Смежные вопросы