Помогите с SQL запросом

12
frantic
На сайте с 09.02.2009
Offline
27
#11
SeoProger:
оставит те, которые первыми встретит, т.е. если в таблице уменьшающееся pos, как в примере, то все сработает верно

спасибо! я и не знал про alter ignore

frantic добавил 23.02.2010 в 23:57

ixRock, да у вас все верно извиняюсь

[Удален]
#12

Всё выполняется одним простым запросом:

проверяем:

select * from test where pos not in (select max(pos) from test group by id, uid)

удаляем:

delete from test where pos not in (select max(pos) from test group by id, uid)

f0x
На сайте с 20.09.2006
Offline
116
f0x
#13

Спасибо всем за подсказки

frantic:
не понял, почему после очистки остались одинаковые id

Потому что uid разные. Столбец id это идентификаторы пользователей которые заходят в аккаунт пользователей с идентификаторами из столбца uid. Типа гости))

Senator007:
Всё выполняется одним простым запросом:

проверяем:
select * from test_table where pos not in (select max(pos) from test group by id, uid)

удаляем:
delete from test_table where pos not in (select max(pos) from test group by id, uid)

Senator007 . То есть нужно создать дубликат таблицы? чтобы из двух выбирать test, test_table

f0x добавил 24.02.2010 в 11:55

SeoProger:

ALTER TABLE test ORDER BY pos DESC;

ALTER IGNORE TABLE test ADD UNIQUE INDEX newindex (id, uid);
ALTER TABLE test DROP INDEX newindex;

Спасибо все получилось. ☝

Незнал даже о таком, очень поучительно.

[Удален]
#14

Senator007 . То есть нужно создать дубликат таблицы? чтобы из двух выбирать test, test_table

Пардон, ошибся сначала написал test, потом думаю дай напишу понятнее и исправил на test_table но не везде исправил

Вот запрос, всё по одной таблице!

select * from table where pos not in (select max(pos) from table group by id, uid)

f0x
На сайте с 20.09.2006
Offline
116
f0x
#15
Senator007:
Senator007 . То есть нужно создать дубликат таблицы? чтобы из двух выбирать test, test_table

Пардон, ошибся сначала написал test, потом думаю дай напишу понятнее и исправил на test_table но не везде исправил

Вот запрос, всё по одной таблице!

select * from table where pos not in (select max(pos) from table group by id, uid)

Select дает сделать, а на DELETE получаю ошибку "You can't specify target table 'table' for update in FROM clause"

[Удален]
#16

А что нужно ещё дописать в этом, чтобы выкидывать не только строки в максимальным id-oм, а строки старее по времее, чтобы оставались только первые например 50?

Одним запросом ;о)

Senator007 добавил 24.02.2010 в 12:26

Да, нужно создать такую же табличку и по ней делать select а из первой делать delete.. Он же сможет делать селект по удаляемой таблице..

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий