@aopil

Как сделать выборку с подсчетом количества записей?

SELECT A.Id, A.ServiceId, B.Ip, B.Port FROM orders A, proxy B WHERE A.CaptchaRequest =:id AND A.StatusId = '5' AND B.IpCountry = 'US' AND B.StatusProxy = '1' ORDER BY NOW() - B.VerifyDateTime LIMIT 1


Есть вот такой sql запрос, мне нужно добавить сюда еще одно условие:
Подсчитать количество записей в таблице request_log с Id, который мы получаем из таблицы proxy, и если это значение меньше 10 (десять мы задаем в php скрипте) выдавать результат, иначе если больше чем 10 записей найдено, то нужно искать какой-то другой Id который подойдет по параметрам.

Структура таблицы request_log:
Id	| IdProxy	 | DateTimeRequest
501     |  30            | 13.06.2019 13:55:00


Задача вот в чем:
Есть таблица в которой хранятся IP - таблица называется proxy, и есть таблица request_log в которую я записываю Id (из таблицы proxy) IP адреса, которые мы уже использовали, и соответственно при выборке в скрипте я задаю лимит, что один и тотже IP адрес мы используем не более 10 раз в сутки, проблема сейчас в том, что нужно добавить в sql запрос условие, чтобы он не брал IP адреса, которые использовались уже больше 10 раз.
  • Вопрос задан
  • 67 просмотров
Решения вопроса 1
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
WHERE (SELECT COUNT(*) FROM `request_log` WHERE `request_log`.`IdProxy` = <idProxy>) <=10

индекс только по request_log.IdProxy добавьте.

а вообще в proxy должно быть поле с количеством использований, чтобы каждый раз не пересчитывать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Попробуйте:
SELECT A.Id, A.ServiceId, B.Ip, B.Port, COUNT(L.Id) FROM orders A, proxy B LEFT JOIN request_log L ON (L.Id=A.Id) WHERE A.CaptchaRequest =:id AND A.StatusId = '5' AND B.IpCountry = 'US' AND B.StatusProxy = '1' ORDER BY NOW() - B.VerifyDateTime LIMIT 1
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы