![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 1 Всего: 34 |
Добрый день,
Незнаю, как это точно называется но задача такая: В таблице есть три поля: UserId, GoodId, TimeSt Условия: пользователь (UserId) ходит по интернет-магазину, просматривает товары (GoodId), фиксируется время просмотра (TimeSt). Задача: формировать список последних 10 просмотренных товаров, т.е. если в выборке уже содержится 10 товаров, то при добавлении нового, если его еще нет в списке, удаляется запись о самом раннем просмотре другого товара, если есть, то удаляется ранняя запись о просмотре данного товара. У меня получилось вот что:
Может есть более изящное решение данной проблемы? ЗЫ Заранее спасибо. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
Конечно. Прочитать справку по синтаксису SELECT ещё раз, обращая особое внимание на TOP n [PERCENT]
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 1 Всего: 34 |
Ну и что?
Я, конечно, наверное, тупой но намека не понял.... |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
А я задачи не понял. Диковато как-то. Зачем надо удалять данные о посещениях? что, настолько места нехватает? да еще в момент именно посещения - это же тормоза, лишние вычисления.
Храните все посещения, а когда нужно - выбирайте последние 10 просмотренных с последними для каждого из них штампами времени. Нет, если и вправду с местом проблемы - чистите таблицу при ежедневном (или, если хотите, ежечасном) обслуживании, оставляя для каждой пары юзер-товар только последний просмотр. А если очень надо - то оставляйте только 10 последних. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Magnifico |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 23.1.2008 Где: Московская област ь Репутация: 10 Всего: 17 |
может пометку удаления ставить на те которые не "тор 10" а потом их удалять- вечерком
-------------------- Всё в порядке - спасибо зарядке ! |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 1 Всего: 34 |
А что делать с повторными заходами?
Зашел на один товар, потом на другой, потом на педыдущий в результате в списке действий будет: Четвертый товар Второй товар Третий товар Второй товар Первый товар Тоже не есть хорошо, т.к. в списке товары должны быть уникальными, а при выборке для отображения последних просмотренных (список будет на каждой странице) делать группировку, выбирать из них максимальные по времени и т.д. тоже не супер.... Вопрос весь не в месте на винте, а в оперативке, т.к. все таблицы, к которым идут частые обращения держатся в ней.... |
|||
|
||||
vladimir74 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 241 Регистрация: 28.11.2006 Репутация: нет Всего: 3 |
для этого есть DISTINCT тогда товар два раза не будет повторяться... конечно если прислушаешься совета Akina .... --------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ. |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 1 Всего: 34 |
DISTINCT выбирает неповторяющиеся записи, а в этой таблице повторяющихся записей нет, т.к. у каждой записи есть TimeSt - время входа, а если не учитывать эту колонку, то как отсортировать записи по убыванию времени захода?
|
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Magnifico |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 23.1.2008 Где: Московская област ь Репутация: 10 Всего: 17 |
UserId и GoodId сделать одной уникальной связкой -------------------- Всё в порядке - спасибо зарядке ! |
|||
|
||||
Itsys |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 1 Всего: 34 |
хе.... запрос будет немного другой....
Добавлено через 3 минуты и 9 секунд Ты имеешь в виду контроль значений, тогда попытка ввода новой записи будет споровождаться ошибкой и, даже если я их буду игнорировать, то я получу на выходе:
а не
|
||||||
|
|||||||
vladimir74 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 241 Регистрация: 28.11.2006 Репутация: нет Всего: 3 |
ну так сортировать по полю ты можешь. не обязательно его выводить.. иои тебе надо вывести время?
Добавлено через 7 минут и 11 секунд хммм
кажется сам и ответил ![]() --------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ. |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 1 Всего: 34 |
||||
|
||||
vladimir74 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 241 Регистрация: 28.11.2006 Репутация: нет Всего: 3 |
а нельзя повесить этот запрос так чтоб он вызывался только во время захода на карточку товара? все таки мне кажется что запрос будет менее нагрудать сервер. Хотя конечно делать этот запрос при каждом движении юзвера тоже не есть хорошо.... --------------------
* В доме помешанного не говорят о миксере.* На любой Ваш вопрос у меня есть любой мой ответ. |
|||
|
||||
Itsys |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1338 Регистрация: 21.1.2008 Где: г. Москва Репутация: 1 Всего: 34 |
В том то и смысл, чтобы показывать пользователю 10 последних просмотренных товаров, чтобы он мог в любой момент вернуться к ним, а не только когда просматривает другой товар...
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "MS SQL" | |
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS SQL Server | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |