Bingo Posted July 15, 2014 Report Share Posted July 15, 2014 С базой MySQL работает веб-приложение, поэтому запросы должны быть максимально оптимизированы на скорость выполнения. Есть 3 связанные таблицы: 1) Главная таблица содержит ряд полей, среди которых поле-индекс town_id связывающее ее со 2й таблицей 2) таблица town содержит поля: town_id (bigint) PRIMARY AUTO_INCREMENT country_id (int) INDEX town (varchar) поля country_id и town объединены в ключ UNIQUE 3) таблица country country_id (int) PRIMARY AUTO_INCREMENT country (varchar) UNIQUE При INSERT или UPDATE главной таблицы данные от пользователя поступают в виде town=Город country=Страна соответственно выполняю ряд запросов: INSERT IGNORE INTO country (country) VALUES('Страна'); INSERT IGNORE INTO town (country_id, town) VALUES(LAST_INSERT_ID(), 'Город'); UPDATE main_table SET town_id=LAST_INSERT_ID() WHERE ... Проблема в том что если INSERT IGNORE не вставил новую запись (при совпадении UNIQUE полей) то LAST_INSERT_ID() возвращает некорректное значение. Выполнять 2 лишних запроса SELECT для проверки существования города и страны в базе не есть хорошо в плане производительности. Возможно есть другие варианты реализации? Link to comment Share on other sites More sharing options...
mmap Posted August 28, 2014 Report Share Posted August 28, 2014 Замените IGNORE на ON DUPLICATE UPDATE id=LAST_INSERT_ID(id) и будет вам счастье Подробнее внизу: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html 2 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now