Protossan
@Protossan
студент

Как сделать случайную выборку с учетом двух таблиц?

Ситуация следующая. есть две таблицы для учебного заведения

1 - основная где хранятся списки пользователей (abitura) с множеством личных полей и ключем id
2 - списки тех, кто уже проверен (proverka) с полями (id, userid, proveril, data). все переменные это цифра - т.е. айдишки
и
3- переменная $pr, которая идентифицирует проверяющего

Суть такая - проверяющий смотрит человека из таблицы abitura, и при этом в таблицу proverka вночится строка - ключ, id человека из первой таблицы (userid), айди проверяющего, дата проверка в unix формате. тут все ок, вопросов нету.

Вторая часть задачи - надо каждому проверяющему выводить в случайном порядке 10 человек, которых он еще не проверил из первой таблицы.

Когда делаю вот так

SELECT * FROM `abitura` WHERE abitura.bal>5 ORDER BY RAND() limit 0,10

(т.е. вывожу случайных 10 юзеров у которых балл больше 5) то все работает

Когда я пытаюсь сделать так
SELECT * FROM `abitura` JOIN `proverka`  WHERE abitura.bal>5 AND (abitura.id<>proverka.userid AND proverka.proveril<>$pr ) ORDER BY RAND() limit 0,10

то получаю пустую выдачу

Подскажите, пожалуйста.
  • Вопрос задан
  • 97 просмотров
Решения вопроса 2
SELECT * FROM `abitura` JOIN `proverka` on abitura.id = proverka.userid WHERE abitura.bal>5 AND proverka.proveril = $pr ORDER BY RAND() limit 0,10

Попробуйте так
Ответ написан
denman1985
@denman1985
SQL, Oracle Forms/Reports dbd
SELECT * 
FROM `abitura` 
WHERE abitura.bal>5 
AND NOT EXISTS (SELECT * FROM `proverka` WHERE abitura.id=proverka.userid AND proverka.proveril=$pr )
ORDER BY RAND() limit 0,10
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы