![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
CHERRY |
|
||||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Предположим есть таблица:
Необходимо убрать(перенести в другую таблицу) из таблицы t лишние записи в соответствии со следующими критериями: 1.В таблице разрешены записи с одним номером телефона, т.е. телефон встречается 1 раз. С этим вроде понятно
Осталось (1, 'a1', '111-11-11') уходят записи (3, 'a3', '111-11-11') (2, 'a2', '222-22-22') (5, 'a5', '333-33-33') (4, 'a4', '333-33-33') (6, 'a6', '111-11-11') (9, 'a9', '444-44-44') (7, 'a7', '222-22-22') (8, 'a8', '333-33-33') 2.В таблице разрешены записи, где номер телефона повторяется не более 2-х раз Осталось (1, 'a1', '111-11-11') уходят записи (6, 'a6', '111-11-11') (2, 'a2', '222-22-22') (8, 'a8', '333-33-33') (3, 'a3', '111-11-11') (9, 'a9', '444-44-44') (4, 'a4', '333-33-33') (5, 'a5', '333-33-33') (7, 'a7', '222-22-22') Ну и в общем случае, где номер телефона повторяется не более N раз. Пытался реализовать следующим образом. Сначала выбираем уникальные SELECT * FROM `t` GROUP BY tel копируем их во временную таблицу и удаляем в основной. Затем опять выбираем уникальные и повторяем копирование и удаление. Можно ли задачу оформить одним запросом? Спасибо. --------------------
Трясу надежды ветвь, но где желанный плод? |
||||
|
|||||
ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 2 Всего: 386 |
вот такое
выдаст нам все строки с телефонами, которые встречаются в таблице только один раз. Соответственно `<=N` вместо `=1` выдаст те телефоны, которые попались не более N раз. Удалить из таблицы все нетакие строки будет сложнее, Mysql блокирует таблицу. Зато их можно перетащить во временную или пользоваться как есть. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! ![]() |
|||
|
||||
CHERRY |
|
||||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Спасибо за участие. Это не совсем то. Возможно я не очень четко описал задачу. Но должно быть, как в приведенных выше примерах. Нужно как бы отфильтровать записи с "лишними" телефонами. Представьте, человек дает объявление в газету по телефону. Он диктует "кучу" объявлений на один номер. Нужно ограничить аппетит и оставить одно объявление на номер телефона (один телефон - одна запись в таблице). Или ограничить более лояльно. Оставить два объявления на один номер телефона (один номер телефона - две записи в таблице). И т.д. --------------------
Трясу надежды ветвь, но где желанный плод? |
||||
|
|||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Один запрос == одно действие. Так что ОДНИМ запросом задача не решается по определению. Как минимум два запроса - первый переносит записи во вторую таблицу, второй удаляет из первой таблицы. Для этого надо как минимум сформировать чёткий и однозначный критерий, позволяющий определить, что ИМЕННО ЭТУ запись следует оставить либо переместить. Например
никак не говорит о том, почему именно так, а не наоборот. Это надо ограничивать ещё на стадии ввода - интерфейс ввода или оператор должны сообщать, что "указанный телефон уже использован в XX объявлениях, для его использования следует сначала аннулировать старые объявления". И соответственно запрещать ввод таких телефонов в БД (например, триггерной логикой). -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
CHERRY |
|
||||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Позволю себе заметить, что ваш совет ничего не прояснил.
Есть таблица в которой есть поле с повторяющимися в произвольном порядке и произвольном количестве значениями. Просьба состоит в том, что нужно составить запрос, который выберет все записи у которых в поле "tel" встречаются повторы не более N раз. В случае, когда N=1 это будет
И не важно какие записи попадут в выборку. Важно ограничить число повторов по полю tel. --------------------
Трясу надежды ветвь, но где желанный плод? |
||||
|
|||||
CHERRY |
|
|||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
где N=1..n Запрос возвращает выборку с N ограничением на повторы. Всем спасибо за участие. Ищите и обрящете. --------------------
Трясу надежды ветвь, но где желанный плод? |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MySQL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |