







|
MySQL.RU - Webboard
Вернуться
СРОЧНО ТРЕБУЕТСЯ ПОМОЩЬ СПЕЦА! (SETRO) 17/10/2001 - 08:16:13
Re: СРОЧНО ТРЕБУЕТСЯ ПОМОЩЬ СПЕЦА! (Василий) 17/10/2001 - 12:58:49
Re: СРОЧНО ТРЕБУЕТСЯ ПОМОЩЬ СПЕЦА! (SETRO) 19/10/2001 - 07:44:11
> Original message text:
> From: SETRO - 17/10/2001 - 08:16:13
> Subject:СРОЧНО ТРЕБУЕТСЯ ПОМОЩЬ СПЕЦА!
> -----------------
> всем хай!
>
> срочно нужна помощь, проблема серьезная, касательно баннерной сети.
>
> вобщем описываю:
> получилось так (мой косяк:() что в базе по баннерам очутилось по несколько записей одних и тех же баннеров, за исключением полей "показан баннер" и "нажат баннер" (они разные), всего полей более 20.
>
> записей о баннерах не более 300, но теперь их аж 1161
>
> некоторых записей по 1, некоторых по 3, некоторых по 5 раз и т.п., т.е. количество одних и тех же записей разное.
>
> ТЕПЕРЬ СУТЬ ВОПРОСА:
> КАК БЫ СДЕЛАТЬ ОДНИМ МАХОМ ВЫБОРКУ И ВСТАВКУ В НОВУЮ БАЗУ ВСЕХ УНИКАЛЬНЫХ ПО ОДНОМУ ПОЛЮ ЗАПИСЕЙ, У КОТОРЫХ ПОЛЕ "ПОКАЗАН" МАКСИМАЛЬНО ИЗ ПОДОБНЫХ ЗАПИСЕЙ (ИДЕНТИЧНЫХ) ДА ЕЩЕ И С ВЫБОРКОЙ ВСЕХ ОСТАЛЬНЫХ ПОЛЕЙ? (незнаю насколько корректен поставленный вопрос, но по другому сформулировать не могу).
>
> мои попытки были следующими
> 1. пытался DISTINCT-om все поля, но тогда выбирает около 600 записей, т.к. дистинктит он все поля, а надо только дистинктить поле file, причем тогда он выбирает случайную запись без гарантии, что эта запись содержит в своем поле "показов" максимальное число
> 2. вручную пытался - нельзя, т.к. баннерную сеть нельзя останавливать, время работает против меня.
> 3. несколькими циклами пытался, выбрать дистинкт по file, потом циклом выбираю максимальное показов, после чего вставляю в базу, но так тоже нельзя, т.к. в процессе работы баннерной сети показы быстро изменяются и соответственно таких записей со значениями из поля "показан" уже нет
>
> ухх. ну вобщем все, надеюсь ктонить поможет,
> заранее всем спасибо.
>
> P.S. можно выбрать уникальные записи только по одному полю, выбрав при этом остальные поля не дистинктив их?
>
From: Василий - 17/10/2001 - 12:58:49
Subject:СРОЧНО ТРЕБУЕТСЯ ПОМОЩЬ СПЕЦА!
-----------------
1. Ну можно так :
lock tables tabname write;
create table tmp as select file, max(num_of_show) as num_of_show from tabname group by file;
create table tmp1 as select tabname.file, tabname.num_of_show, [other tabname's fields] from tabname, tmp where
tabname.file=tmp.file and tabname.num_of_show=tmp.num_of_show;
drop table tmp;
delete from tabname;
insert into tabname(file, num_of_row, [other fields]) select file, num_of_row, [other fields] from tmp1;
unlock tables;
drop table tmp1;
и таблица tabname содержит то,что надо.
тут, конечно, все равно на какое-то время таблица блокируется. Но все попытки изменить её записи кем-то другим не производятся, а ждут разблокирования таблицы, т.е. дают то самое время, которого не хватает.
2. Обращаю внимание : нельзя вместо
delete from tabname;
insert into tabname(file, num_of_row, [other fields]) select file, num_of_row, [other fields] from tmp1;
делать
drop table tabname;
alter table tmp1 rename tabname;
- в этом случае ждущие разблокирования изменения выдадут ошибку.
3. если сделать индекс на
create index tabname_ind1 on tabname(file,num_of_show);
и пропустить указанные команды одним скриптом,
mysql -uuser -hhost -ppassword -f databasename < script.sql
это отработает быстро.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
383
|
|