Задавайте вопросы, мы ответим
Вы не зашли.
В таблице два ключа один главный (авто инкремент), второй уникальный - текст.
Добавляется строка с двумя этими ключами. Если в качестве второго ключа уникальный текст - то идет добавление и я получаю ID главного ключа в PHP mysql_insert_id
А как получить ID главного ключа, если текст дублируется? Т. е. строка не добавляется в insert.
Я имею ввиду простой способ, а не банальный запрос через SELECT по уникальному тексту.
Отредактированно affiliater (24.09.2011 09:56:05)
Неактивен
А зачем Вам id, если по смыслу главным ключом у Вас является как раз
второе поле?
Правильно: сделать главным ключом это поле.
Неправильно, ибо костыль: SELECT id FROM tablaname после неудачной
вставки.
Неактивен
Для ссылки надо короткий номер. Сам ключ в качестве текста не нужен. Я не знаю иного способа контролировать уникальность добавления второго текстового поля кроме как пометить его уникальным индексом.
Смысл в табличку добавлять текст, добавляться должен только уникальный и иметь ключ для ссылки (сайт).
Ищу самый эффективный путь, так как надо минимальное количество запросов.
А получение ID надо для другой таблицы для связи.
Отредактированно affiliater (24.09.2011 19:36:45)
Неактивен
Самый простой способ и есть: Проверить наличие текста в таблице. Если текст есть, то ИД = полученный ИД из запроса, если текста нет, то вставляем и получаем ИД новой строки.
Неактивен
Я в первом посте написал, что этот способ не предлагать
Есть отличный способ в один запрос добавлять новую запись, а в случае наличия менять ее, вот, например:
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)
Неактивен
Откуда такое желание делать разные вещи одним запросом? Вы же не пробуете
одновременно спать и есть — почему Вы хотите одним запросом делать разное?
Неактивен
SELECT — чтение данных.
INSERT/UPDATE/REPLACE — запись данных.
В одном запросе одновременно записать и прочитать данные...? Хм, как найдете решение, отпишитесь. +)
Неактивен
paulus написал:
Откуда такое желание делать разные вещи одним запросом? Вы же не пробуете
одновременно спать и есть — почему Вы хотите одним запросом делать разное?
А разве одним запросом не быстрее?
И просто любопытно, можно ли так сделать.
Отредактированно affiliater (26.09.2011 09:30:10)
Неактивен
Попробуйте провести эксперимент — приготовьте яичницу и чай.
В один день съешьте так, как делают люди — последовательно
(или чередуя). А в другой день возьмите чашку в одну руку, вилку
в другую и ешьте одновременно. Засеките времена двух подходов
и сравните, будет ли быстрее «одним запросом»
P.S. Нет, так сделать нельзя. И в базе, и в жизни — чай в любом
случае разольете.
Неактивен
paulus, вы творческий человек :-)
Уже много лет отвечаете на один и тот же вопрос и каждый раз разной метафорной историей :-)
Неактивен