mysql-запрос

Mar 04, 2011 15:15

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

Недавно зашла речь о решении ниже представленной задачи. Решалось все на салфетках, так что в общем вопрос был в концепте решения, а не в конкретном запросе.
Я предложил свой вариант, но меня осадили, сообщив, что так не выйдет, надо использовать подзапросы. Решение было названо в корне неправильным. Спорить не было ни времени, ни аргументов.
Не будучи специалистом высокого класса, я предложил что-то вроде
"select name,count(times) as c from users left join stats on users.id=stats.id group by name;"
это НЕ РЕШЕНИЕ задачи. Это, так сказать, направление мысли. А вот что я придумал, когда добрался до компьютера. По-моему это правильное решение, без подзапросов. 
Прошу гуру прокомментировать мой вариант.

Задача:
Существует две таблицы: пользователи и статистика. В таблице пользователей два поля:
идентификатор и имя. В таблице статистики так же два поля: идентификатор пользователя и 
время посещения спортивного клуба.

Необходимо сконструировать запрос, результатом работы которого будет два столбца:
имя пользователя и количество визитов за последнюю неделю. Результат необходимо отобразить для тех пользователей, которые посетили заведение не менее двух или ни одного раза за указанный период.

Версия доступного mysql 5.1.40-community.

Пояснения к моему решению (добавлено позже):
В тексте задачи есть формулировка  "не меньше двух", в коде записано >2. Задача изначально стояла именно о "больше двух". Это моя ошибка в описании задачи.
В запросе есть участок, который отсекает записи "из будущего". Изначально тестовая база содержала случайные данные, в том числе из будущего.



create database test_simpsons;
use test_simpsons;

drop table if exists `users`;

CREATE TABLE `users` (
`id` int(10) NOT NULL auto_increment,
`name` varchar(50),
PRIMARY KEY (`id`)
) ENGINE=MyISAM;

insert into users (`id`,`name`) values ("1", "Homer");
insert into users (`id`,`name`) values ("2", "Marge");
insert into users (`id`,`name`) values ("3", "Bart");
insert into users (`id`,`name`) values ("4", "Lisa");
insert into users (`id`,`name`) values ("5", "Maggie");

drop table if exists `stats`;

CREATE TABLE `stats` (
`id` int(10) NOT NULL,
`times` timestamp
) ENGINE=MyISAM;

insert into stats (`id`,`times`) values ("1", now()-interval 1 day);
insert into stats (`id`,`times`) values ("1", now()-interval 3 day);
insert into stats (`id`,`times`) values ("1", now()-interval 5 day);
insert into stats (`id`,`times`) values ("1", now()-interval 9 day);
insert into stats (`id`,`times`) values ("1", now()-interval 6 day);
insert into stats (`id`,`times`) values ("1", now()-interval 2 day);
insert into stats (`id`,`times`) values ("2", now()-interval 7 day);
insert into stats (`id`,`times`) values ("2", now()-interval 2 day);
insert into stats (`id`,`times`) values ("2", now()-interval 6 day);
insert into stats (`id`,`times`) values ("3", now()-interval 1 day);
insert into stats (`id`,`times`) values ("3", now()-interval 3 day);
insert into stats (`id`,`times`) values ("3", now()-interval 9 day);
insert into stats (`id`,`times`) values ("3", now()-interval 4 day);
insert into stats (`id`,`times`) values ("3", now()-interval 2 day);
insert into stats (`id`,`times`) values ("4", now()-interval 7 day);
insert into stats (`id`,`times`) values ("3", now()-interval 8 day);
insert into stats (`id`,`times`) values ("3", now()-interval 8 day);
insert into stats (`id`,`times`) values ("3", now()-interval 8 day);

Previous post Next post
Up