MySQL — аналог ON DUPLICATE KEY (или как объединить UPDATE и INSERT)?
Итак, всё просто. Есть база данных товаров.
Есть парсер, который берет данные товара из источника, и передает их в MySQL запрос.
Данный запрос должен работать по логике:
1. Проверяем по артикулу товара есть ли такой в БД
2. Если есть UPDATE
3. Если нет INSERT
Про ON DUPLICATE KEY знаю, читал, но есть проблемы:
1. Не могу использовать ON DUPLICATE KEY так как в БД у некоторых товаров поле артикула пустое и нет возможности сделать поле с артикулом UNIQUE.
2. Учитывая пункт 1 (что у некоторых товаров не артикула), можно взять артикул из названия товара(он там есть) - но тут получается что надо использовать LIKE '%abc%', что в ON DUPLICATE KEY невозможно впихнуть никак.
Короче говоря, нужна альтернатива ON DUPLICATE KEY, что то в духе проверки по условию.
Что можно еще придумать в моем случае ? Как запихнуть в один запрос проверку по условию и затем выполнение нужного запроса силами MySQL.
Евгений Долбановский, Искать артикул надо на клиенте до занесения записи в БД. Иначе всё равно не сможете сравнить две строки, у которых поле артикула не заполнено и он в обоих случаях есть только в названии.
В вашем же примере, как найти добавление ещё одного ВАЗ 2105 с отсутствующим артикулом?
Евгений Долбановский, Тогда не сможете избежать дублирования. Если в уже записанной в БД строке нет артикула, а название во вставляемой строке не совпадает с имеющейся, то строки всё равно задублируются. Либо придумывайте алгоритм, который скажет, что "ВАЗ 2105" и "Жигули пятёрка" это одно и то же.