Выбрать записи случайным образом и отличаться от ранее выбранных записей - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть таблица с 8000 записей, я хочу случайным образом выбрать некоторые записи (например, 10) из этой таблицы. Эти записи должны отличаться от ранее выбранных записей.

Например, с помощью этого запроса я выбираю несколько вопросов:

SELECT coloumn1,column2 FROM `myTable` WHERE `status`=1 AND `group`=6 ORDER BY RAND() LIMIT 0, :max

Теперь, как я могу выбрать новые записи случайным образом и отличаться от ранее выбранных записей?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

try: SELECT coloumn1, column2 ОТ myTable WHERE status = 1 AND group = 6 AND coloumn1 NOT IN (id, id, id, id, идентификаторы объединены в php) ORDER BY RAND () LIMIT 0,: max

, а также в select, лучше выберите столбец, который является уникальным идентификатором строки, и используйте этот столбец с NOT IN ()

  • избежать RAND () какон чрезвычайно медленный - лучше обойти его с помощью php

Если число выбранных записей слишком велико, поместите их во временную таблицу и используйте

NOT IN (SELECT id FROMвременная таблица ...)

0 голосов
/ 07 сентября 2018

Просто вы можете сохранить идентификаторы ранее выбранных записей и затем добавить их к следующему запросу, как показано ниже, чтобы избежать их выбора дважды:

WHERE id NOT IN = (list of ids)

На основании вашего примера:

SELECT coloumn1,column2 FROM `myTable` WHERE `status`=1 AND `group`=6 AND id NOT IN (_IDS_) ORDER BY RAND() LIMIT 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...