Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаление только одной записи 
V
    Опции темы
del3d
Дата 5.5.2009, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.11.2007

Репутация: нет
Всего: нет



Здравствуйте.

Пишу набор скриптов для работы с БД

Имеется таблица без первичного ключа:
Код

CREATE TABLE `test`(
`name` varchar(255),
`age` int)


Заполнена, к примеру:

Иван | 23
Петр | 34
Петр | 34
Петр | 34
Петр | 34

Можно ли как нибудь удалить конкретную запись, допустим 3-ю?
Т.е. только ту, которую я захочу удалить, а не просто одну из совпадающих



PM MAIL   Вверх
DimW
Дата 5.5.2009, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(del3d @  5.5.2009,  12:28 Найти цитируемый пост)
Можно ли как нибудь удалить конкретную запись, допустим 3-ю?

нет понятия номера хранения строки в БД.

Цитата(del3d @  5.5.2009,  12:28 Найти цитируемый пост)
Имеется таблица без первичного ключа:

чем вызвана необходимость создавать таблицу без primary key?

PM MAIL ICQ   Вверх
del3d
Дата 5.5.2009, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.11.2007

Репутация: нет
Всего: нет



А вдруг будет такая таблица..
Хочется из браузера при клике на строке, чтобы генерировался запрос типа:
Код

DELETE FROM `table` WHERE чего-то там..

и атправлялся на сервер..
PM MAIL   Вверх
DimW
Дата 5.5.2009, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(del3d @  5.5.2009,  12:55 Найти цитируемый пост)
А вдруг будет такая таблица..

что значит ВДРУГ? вы что не приходя в сознание БД проектируете? если все действительно так запущено то процедуру добавления первичного ключа нужно отработать до автоматизма, по крайней мере в слечае с mysql т.к. системного идентификатора для строк в нем не предусмотренно, в отличие от Oracle, но и это не всегда спасает.

Цитата(del3d @  5.5.2009,  12:55 Найти цитируемый пост)
Хочется из браузера при клике на строке, чтобы генерировался запрос типа:

и не "чего-то там" а так:
Код

DELETE FROM `table` WHERE  id = :p_id

и ни как иначе.
PM MAIL ICQ   Вверх
skyboy
Дата 5.5.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(del3d @  5.5.2009,  11:55 Найти цитируемый пост)
Хочется из браузера при клике на строке

делаешь запрос:
Код

DELETE FROM `some_table` WHERE field1=@value1б field2=@value2 ... filedN=@valueN LIMIT 1

т.е. перечисляешь все поля "выбранной" записи.
и ставишь "LIMIT 1".
Цитата(del3d @  5.5.2009,  11:28 Найти цитируемый пост)
удалить конкретную запись, допустим 3-ю

не шали. подумай сам: заметишь ты разницу между удалением третьей по порядку в твоем примере или четвертой? Наверное, удалять можно любую с точно соответствующим содержимым. будет несколько - удалишь одну из.

Добавлено через 2 минуты и 13 секунд
возможно, рациональнее будет для BLOB полей указывать хеш значения. по крайней мере, запрос будет человекочитаемым и не выйдет за пределы лимитов на память, даже если эти лимиты будут небольшие, а значения - огромными.
PM MAIL   Вверх
DimW
Дата 5.5.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(skyboy @  5.5.2009,  14:01 Найти цитируемый пост)
делаешь запрос:

а если полей 100 и >?
PM MAIL ICQ   Вверх
skyboy
Дата 5.5.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(DimW @  5.5.2009,  13:11 Найти цитируемый пост)
а если полей 100 и >? 

и что? а если 200? не вижу проблемы, если запрос формируется динамически скриптом. Или тебя беспокоит размер получаемого запроса?
Цитата(DimW @  5.5.2009,  12:56 Найти цитируемый пост)
что значит ВДРУГ?

есть такой front-end для mysql, называется phpmyadmin. его разработчики абсолютно не знают, с какими БД придется работать их продукту. С первичным ключом, али нет.
Даже если del3d делает свою CMS и хочет разработать простую систему бекапа/синхронизации, то он тоже никак не может знать, какие таблицы ему "подсунут".
Я не к тому, что можно проектировать БД "спустя рукава", а к тому что перед возгласами "у тебя неправильно спроектировано, иди учи матчасть" не лишне будет спросить "а возможно ли поменять структуру на более корректную?"
PM MAIL   Вверх
DimW
Дата 5.5.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(skyboy @  5.5.2009,  17:49 Найти цитируемый пост)
а к тому что перед возгласами "у тебя неправильно спроектировано, иди учи матчасть" не лишне будет спросить "а возможно ли поменять структуру на более корректную?" 

Цитата(DimW @  5.5.2009,  12:44 Найти цитируемый пост)
чем вызвана необходимость создавать таблицу без primary key?


Цитата(skyboy @  5.5.2009,  17:49 Найти цитируемый пост)
то он тоже никак не может знать, какие таблицы ему "подсунут".

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

и вообще телепат из меня некудышный, если все же вы правы то отлично. 
PM MAIL ICQ   Вверх
ZZZubec
Дата 5.5.2009, 21:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 12.9.2008

Репутация: нет
Всего: нет



Можно ли удалить 3ию запись, запросто используй LIMIT 1. и делай условие.
я тебя на столько же уверяю, что ты удалишь именно 3ию, насколько ты сможешь определить, что она именно 3ия...

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

*единственная проблема человека - это сам человек...
PM MAIL   Вверх
del3d
Дата 6.5.2009, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.11.2007

Репутация: нет
Всего: нет



Спасибо skyboy
Цитата(skyboy @  5.5.2009,  14:01 Найти цитируемый пост)
делаешь запрос:код SQL1:DELETE FROM `some_table` WHERE field1=@value1б field2=@value2 ... filedN=@valueN LIMIT 1highlightSyntax('sql_NmMzc','sql');т.е. перечисляешь все поля "выбранной" записи.и ставишь "LIMIT 1".

Хочется, конечно, сделать универсальный инструмент..

Цитата(DimW @  5.5.2009,  13:56 Найти цитируемый пост)
если все действительно так запущено то процедуру добавления первичного ключа нужно отработать до автоматизма

А можно ли узнать первичный ключ таблицы?
PM MAIL   Вверх
DimW
Дата 6.5.2009, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(del3d @  6.5.2009,  09:35 Найти цитируемый пост)
А можно ли узнать первичный ключ таблицы?

не понял вопрос. узнать есть ли он вообще или на момент удаления взять конкретное значение и передать его в запрос?
PM MAIL ICQ   Вверх
del3d
Дата 6.5.2009, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.11.2007

Репутация: нет
Всего: нет



ДУзнать, есть ли он вообще и его имя его поля (полей)..
PM MAIL   Вверх
DimW
Дата 7.5.2009, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



del3d, в mysql не селен, полюбому должны быть системные таблицы в которых эта инфа есть, погугли или дождись знающих людей.
PM MAIL ICQ   Вверх
Gwire
Дата 9.5.2009, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 216
Регистрация: 7.8.2007
Где: Николаев

Репутация: 1
Всего: 4




Цитата(del3d @  6.5.2009,  10:54 Найти цитируемый пост)
есть ли он вообще и его имя его поля

Может это поможет.
Код
SHOW FULL FIELDS FROM <имя таблицы>; /* или */
SHOW COLUMNS FROM <имя таблицы>; /* или */
SELECT COLUMN_NAME, COLUMN_KEY FROM `information_schema`.`COLUMNS` WHERE TABLE_NAME = '<имя таблицы>' AND TABLE_SCHEMA = '<имя БД>';

smile Удачи.



Это сообщение отредактировал(а) Gwire - 9.5.2009, 13:15
PM MAIL   Вверх
del3d
Дата 12.5.2009, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 128
Регистрация: 13.11.2007

Репутация: нет
Всего: нет



Цитата(Gwire @  9.5.2009,  12:59 Найти цитируемый пост)
Может это поможет.КодincludeSyntax('sql');SHOW FULL FIELDS FROM <имя таблицы>; /* или */SHOW COLUMNS FROM <имя таблицы>; /* или */SELECT COLUMN_NAME, COLUMN_KEY FROM `information_schema`.`COLUMNS` WHERE TABLE_NAME = '<имя таблицы>' AND TABLE_SCHEMA = '<имя БД>';

Спасибо! smile 
Вот так написал:
Код
SELECT `COLUMN_NAME`
FROM `information_schema`.`COLUMNS` 
WHERE `TABLE_NAME` = '<имя таблицы>' 
AND `TABLE_SCHEMA` = '<имя БД>'
AND `COLUMN_KEY`='PRI';

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0622 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.