Я искал ответ в течение нескольких дней, но, похоже, не могу найти правильного решения. Поэтому я задаю следующий вопрос:
Предположим, у меня есть таблица с колонкой ID
который является AUTO_INCREMENT
поле и столбец Word
который уникален Я запускаю следующие запросы:
"INSERT IGNORE INTO Table (Word) VALUES('Test')""INSERT IGNORE INTO Table (Word) VALUES('Test1')""INSERT IGNORE INTO Table (Word) VALUES('Test2')""INSERT IGNORE INTO Table (Word) VALUES('Test')" //THIS ONE WILL BE IGNORED
Проблема в том, что я не могу получить последнее $mysqli->insert_id
из последнего запроса, потому что он ничего не вставляет. Однако мне нужен этот идентификатор, который уже находится в БД. поэтому я подумал, что я должен использовать ON DUPLICATE KEY UPDATE
Однако это приводит к ситуации, когда AUTO_INCREMENT пропускает значения, поскольку обновляет значение, но ТАКЖЕ увеличивает AUTO_INCREMENT
значение, хотя это значение не назначено ни одной строке.
В итоге я получаю таблицу, подобную этой:
ID |Word
1 |Test
2 |Test1
3 |Test2
//Trying to insert words that where already in the table..
12 |Test3
//Trying to insert words that where already in the table..
17 |Test4
Мой ответ заключается в том, чтобы сначала получить идентификатор слова из таблицы и только в том случае, если он не может его вставить. В обоих случаях у вас есть готовый идентификатор.
Я думаю также, что это будет быстрее, так как вы не создаете никаких игнорируемых ошибок в MySQL.
Других решений пока нет …