mysql-запрос

Mar 04, 2011 15:15

Привет всем интересующимся.

Недавно зашла речь о решении ниже представленной задачи. Решалось все на салфетках, так что в общем вопрос был в концепте решения, а не в конкретном запросе.
Я предложил свой вариант, но меня осадили, сообщив, что так не выйдет, надо использовать подзапросы. Решение было названо в корне неправильным. Спорить не было ни ( Read more... )

Leave a comment

Comments 4

trailmax March 4 2011, 12:28:28 UTC
подзапросы?? не нужны они там.
Направление мысли правильное и религизно-верное -)

Сам запрос не проверял, но выглядит корректно.
Нужно будет внимательно проверить пользователей без запросов вообще, но если нужно показывать "всех с запросами больше двух" то это не очень важно.. и, в принципе, можно left join сменить на inner join

Reply

Спасибо festinspb March 4 2011, 12:35:00 UTC
Пользователи без запросов в указанный период выводятся "с нулем", так как есть условие "или ни одного".

Reply

Re: Спасибо trailmax March 4 2011, 12:44:02 UTC
Ну и славненько ))
Не знаю точно про mysql но в MS SQL Server запросы с подзапросами и запросы с inner join интерпритируются движком в одинаковом виде.
Мускуль может такого не делать, но подзапросами я бы не стал злоупотреблять. Хотябы потому что выглядит не всегда понятно.

Reply


hobohabilis March 5 2011, 00:45:47 UTC
С поправкой на специфику MySQL (многие другие СУБД не позволяют использовать alias-ы колонок в предикате HAVING, например) ваш запрос выглядит вполне адекватным решением поставленной задачи. Тем не менее, я бы посоветовал вам добавить композитный индекс для колонок stats.id и stats.times. Или хотя бы проиндексировать stats.id. В зависимости от распределения данных в таблицах stats и users альтернативным решением могла бы явиться derived-таблица в которую предварительно выбирались бы все строки stats за прошедшую неделю, чтобы потом left-join-аться с users (pardon my Russian). Если использовать R-Tree индекс для stats.times, то range scan в этом случае будет ужасно эффективным. Поэкспериментируйте на досуге.

Reply


Leave a comment

Up