2016-09-15 1 views
0

У меня есть стол Post, пользователь может искать сообщение по поиску по ключевым словам.Решение Mysql Случайный запрос мигрирует, когда goto другая страница

Итак, я использую SQL-запрос по ключевому слову и по заказу RAND(). При отображении результата я использую данные GridView и Pagination. И есть проблема, когда переходите на другую страницу. Пример со страницы 1 перейдите на страницу 2 с тем же ключевым словом. Я снова запрошу и закажу Rand(). Поэтому некоторые данные на стр. 1 могут появиться на стр. 2. Эти данные дублируются и не хороши.

Так как я могу решить эту проблему. и запрос данных, когда другая страница goo будет одинаковой с данными в первом запросе.

Я использую Yii2 в своем проекте.

+0

Ну, вы ограничиваете запрос (например) 20 результатами и используете 'ORDER BY RAND()', правильно? Но в MySQL 'ORDER' применяется до' LIMIT', поэтому вы всегда получаете случайные результаты, а затем ограничиваете их, поэтому некоторые из них появляются на других страницах. Кстати, зачем вам нужно использовать 'RAND()'? Не рекомендуется, когда вы хотите использовать страницы для получения результатов. – debute

+0

Да, требуется клиент для случайных данных. И требуют запроса всех данных. Я нашел решение для случайного элемента. Я не использую mysql random. Когда данные запроса, я не использую случайный, и когда результат показа для пользователя будет случайным по php. и при повторном доступе. На первой странице будет случайным одно и то же правило. Поэтому я не знаю точного php funtion для случайного массива с таким же результатом (добавьте по некоторому условию) – dungphanxuan

ответ

0

Хорошо, думаю, я понял. Пример MySQL запросов:

SELECT * FROM articles WHERE name LIKE '%tag%' LIMIT 0, 20; 

Или вы можете использовать в MySQL MATCH() вместо LIKE, это не имеет значения. Тогда LIMIT 0, 20 - это лимит, сколько результатов для первой страницы. Для второй страницы это должно быть LIMIT 1, 20. Этот, кого ты знаешь, кроме меня. Затем вы получаете массив результатов в PHP и хотите получить случайные значения. PHP имеет такую ​​функцию для вас и называется suffle().

Итак, вы просто используете shuffle($results);, а затем можете печатать их с помощью foreach или любого другого, что вы используете для печати данных. Обратите внимание, что shuffle() возвращает логическое значение, поэтому не используйте $results = shuffle($results);. Надеюсь это поможет.

+0

это решение, не используя rand() в mysql. Таким образом, проблема, необходимость клиента Выберите все данные и случайные. По вашему мнению, некоторые данные (id от 0 до 20) всегда появляются первыми. Итак, как сначала нужно указать элемент N? И есть функция PHP для случайного массива с таким же результатом? Пример случайной первой страницы, такой же случайной на следующей странице. – dungphanxuan

+0

Тогда это, вероятно, невозможно, так как посещение новой страницы отправит новый запрос. Когда вы будете использовать 'RAND()', у вас всегда будет проблема, как в вопросе. Одним из решений является сохранение идентификаторов с первой страницы, а затем их отключение от других запросов, что является очень неправильным решением. Другой может поймать все результаты и использовать разбиение на страницы с помощью JavaScript, но это будет иметь огромное влияние на производительность с большим количеством результатов. – debute

+0

Да, я думаю, это невозможно. Поэтому у меня есть решение о кешировании данных. Когда первая страница accest, я запрашиваю данные и храню кеш и назначаю ключ, затем обращаюсь к другой странице, я пошлю ее и получаю данные из кеша. – dungphanxuan

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