Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: помогите с DELET'om

Сообщения:  [1-10]   [11-17] 

 
 автор: mechanic   (10.04.2008 в 16:47)   письмо автору
 
   для: doddoindan   (10.04.2008 в 16:42)
 

старый мускуль?
у меня на 5.0-м все ок

   
 
 автор: doddoindan   (10.04.2008 в 16:42)   письмо автору
 
   для: mechanic   (10.04.2008 в 16:11)
 

>а хотя не!
>в один запрос они отлично объединяются!
>
delete from vacancies where regionid=20 and id not in (select max(id) as maxid from vacancies where regionid=20 group by dopinfo, profession)


смысл тотоже что и у меня в первом посте, только красивее) проблема в том что сервер ругается на вложенный селект в делете...

ну вообщем я уже всё сделал скриптом) спасибо за помощь

   
 
 автор: mechanic   (10.04.2008 в 16:11)   письмо автору
 
   для: doddoindan   (10.04.2008 в 13:17)
 

че то красивый запрос не рожается..
может тебя устроит в 2 этапа
select dopinfo, profession, max(id) as maxid from vacancies where regionid=20 group by 1,2

а потом
delete from vacancies where regionid=20 and id not in ("те id что мы выбрали тока что")



а хотя не!
в один запрос они отлично объединяются!
delete from vacancies where regionid=20 and id not in (select max(id) as maxid from vacancies where regionid=20 group by dopinfo, profession)

   
 
 автор: doddoindan   (10.04.2008 в 14:54)   письмо автору
 
   для: ronin80   (10.04.2008 в 14:21)
 

да и так не проканает так как мне надо проверять запись на дубляж двух столбцов

   
 
 автор: doddoindan   (10.04.2008 в 14:29)   письмо автору
 
   для: ronin80   (10.04.2008 в 14:21)
 

а надо чтобы удаляло все повторяющиеся
и id которых не равняется максимальному id из группы повторяющихся (а не из все таблицы)...

   
 
 автор: ronin80   (10.04.2008 в 14:21)   письмо автору
 
   для: doddoindan   (10.04.2008 в 13:57)
 

delete from table
where column in (select column from table as t group by t.column having count(*)>1)
and id not in (select max(t.id) as id from table as t group by t.id )

удаляет из таблицы все записи количество которых больше 1 и значение поля id которых не равняется максимальному значению id в таблице

можно ещё второе условие изменить:

and id <> (select max(t.id) as id from table as t group by t.id )

   
 
 автор: doddoindan   (10.04.2008 в 13:57)   письмо автору
 
   для: ronin80   (10.04.2008 в 13:42)
 

ну смотри что делает сейчас твой запрос

1е условие - выбирает все записи в которых заданное поле повторяется
2е условие - всегда возвращает максимальный id из талицы

хау итс ворк?)

   
 
 автор: ronin80   (10.04.2008 в 13:42)   письмо автору
 
   для: doddoindan   (10.04.2008 в 13:35)
 

я не очень понял

" чтобы это условие знало какие сейчас проверяются значения т.е. во втором условии должно быть что-то типа where t.column=tt.column "

как это должно выглядеть?

   
 
 автор: doddoindan   (10.04.2008 в 13:35)   письмо автору
 
   для: ronin80   (10.04.2008 в 13:23)
 



>delete from table
>where column in (select column from table as t group by t.column having count(*)>1)
>and id not in (select max(t.id) as id from table as t group by t.id )



вот в этой строчке у тебя выбирается просто максимальный id в таблице, а как сделать так, чтобы это условие знало какие сейчас проверяются значения т.е. во втором условии должно быть что-то типа where t.column=tt.column

   
 
 автор: ronin80   (10.04.2008 в 13:23)   письмо автору
 
   для: doddoindan   (10.04.2008 в 13:17)
 

допустим если таблица такого вида table (id первичный ключ, column char)
тогда примерно так

delete from table
where column in (select column from table as t group by t.column having count(*)>1)
and id not in (select max(t.id) as id from table as t group by t.id )

попробуй так, таким образом будут удалены все повторяющиеся строки кроме последней из повторяющихся, соответственно заменив функцию max на другое условие можно выбирать какие записи оставлять в таблице

   

Сообщения:  [1-10]   [11-17] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования