SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 24.09.2011 09:51:40

affiliater
Участник
Зарегистрирован: 24.09.2011
Сообщений: 5

Получить ID дублированного ключа при добавлении

В таблице два ключа один главный (авто инкремент), второй уникальный - текст.
Добавляется строка с двумя этими ключами. Если в качестве второго ключа уникальный текст - то идет добавление и я получаю ID главного ключа в PHP mysql_insert_id
А как получить ID главного ключа, если текст дублируется? Т. е. строка не добавляется в insert.

Я имею ввиду простой способ, а не банальный запрос через SELECT по уникальному тексту. smile

Отредактированно affiliater (24.09.2011 09:56:05)

Неактивен

 

#2 24.09.2011 18:52:54

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Получить ID дублированного ключа при добавлении

А зачем Вам id, если по смыслу главным ключом у Вас является как раз
второе поле?

Правильно: сделать главным ключом это поле.

Неправильно, ибо костыль: SELECT id FROM tablaname после неудачной
вставки.

Неактивен

 

#3 24.09.2011 19:20:43

affiliater
Участник
Зарегистрирован: 24.09.2011
Сообщений: 5

Re: Получить ID дублированного ключа при добавлении

Для ссылки надо короткий номер. Сам ключ в качестве текста не нужен. Я не знаю иного способа контролировать уникальность добавления второго текстового поля кроме как пометить его уникальным индексом.

Смысл в табличку добавлять текст, добавляться должен только уникальный и иметь ключ для ссылки (сайт).
Ищу самый эффективный путь, так как надо минимальное количество запросов.

А получение ID надо для другой таблицы для связи.

Отредактированно affiliater (24.09.2011 19:36:45)

Неактивен

 

#4 25.09.2011 14:42:53

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: Получить ID дублированного ключа при добавлении

Самый простой способ и есть: Проверить наличие текста в таблице. Если текст есть, то ИД = полученный ИД из запроса, если текста нет, то вставляем и получаем ИД новой строки.

Неактивен

 

#5 25.09.2011 22:26:16

affiliater
Участник
Зарегистрирован: 24.09.2011
Сообщений: 5

Re: Получить ID дублированного ключа при добавлении

Я в первом посте написал, что этот способ не предлагать smile
Есть отличный способ в один запрос добавлять новую запись, а в случае наличия менять ее, вот, например:
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
Но к сожалению ON DUPLICATE KEY работает только с UPDATE (с SELECT - не работает), поэтому получить все и вся в одном запросе тут не получиться. Но нигде так и не нашел, как в запросе INSERT в случае, если ключ уже есть выудить его без второго запроса SELECT.

Я то, конечно сделал банальный вариант, но просто из любопытства хочу найти самый быстрый и простой путь в один запрос.

Отредактированно affiliater (25.09.2011 22:34:29)

Неактивен

 

#6 26.09.2011 00:27:41

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Получить ID дублированного ключа при добавлении

Откуда такое желание делать разные вещи одним запросом? Вы же не пробуете
одновременно спать и есть — почему Вы хотите одним запросом делать разное?

Неактивен

 

#7 26.09.2011 01:05:28

Александр Трофимов
Завсегдатай
Откуда: Юрмала
Зарегистрирован: 19.09.2011
Сообщений: 95

Re: Получить ID дублированного ключа при добавлении

SELECT — чтение данных.
INSERT/UPDATE/REPLACE — запись данных.

В одном запросе одновременно записать и прочитать данные...? Хм, как найдете решение, отпишитесь. +)

Неактивен

 

#8 26.09.2011 08:19:49

affiliater
Участник
Зарегистрирован: 24.09.2011
Сообщений: 5

Re: Получить ID дублированного ключа при добавлении

paulus написал:

Откуда такое желание делать разные вещи одним запросом? Вы же не пробуете
одновременно спать и есть — почему Вы хотите одним запросом делать разное?

А разве одним запросом не быстрее? smile
И просто любопытно, можно ли так сделать.

Отредактированно affiliater (26.09.2011 09:30:10)

Неактивен

 

#9 26.09.2011 11:51:56

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Получить ID дублированного ключа при добавлении

Попробуйте провести эксперимент — приготовьте яичницу и чай.
В один день съешьте так, как делают люди — последовательно
(или чередуя). А в другой день возьмите чашку в одну руку, вилку
в другую и ешьте одновременно. Засеките времена двух подходов
и сравните, будет ли быстрее «одним запросом» wink

P.S. Нет, так сделать нельзя. И в базе, и в жизни — чай в любом
случае разольете.

Неактивен

 

#10 26.09.2011 14:58:53

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: Получить ID дублированного ключа при добавлении

paulus, вы творческий человек :-)
Уже много лет отвечаете на один и тот же вопрос и каждый раз разной метафорной историей :-)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson