Ice_Sochi
Участник
- Сообщения
- 709
- Реакции
- 413
Доброго времени суток!
Опишу саму проблему и вводные:
Есть 3 столбца в таблице: config_id, client_id, count
Никакое из этих значений не является уникальным, один client_id может многократно повторяться с разными config_id и count
Задача состоит в том, что нужно добавить новую строку, если таковой нет с нужными client_id и config_id, и обновить count, если строка с client_id и config_id уже имеется
Есть простое решение:
Сделать запрос SELECT..., если результаты есть - обновить, если результатов нет - добавить строку
Но мне уж очень это не нравится и не хочется это делать.
Возможно, можно решить задачу исключительно посредством возможностей БД, не обрабатывая обратный вызов в плагине?
Работоспособность нужна и на mysql, и на sqlite, но хотябы на mysql
Я попробовал определенные способы из гугла, но большинство из них имеют требования - уникальность ключа, коей нет в моем случае
Буду чрезмерно благодарен за подсказки и помощь.
Опишу саму проблему и вводные:
Есть 3 столбца в таблице: config_id, client_id, count
Никакое из этих значений не является уникальным, один client_id может многократно повторяться с разными config_id и count
Задача состоит в том, что нужно добавить новую строку, если таковой нет с нужными client_id и config_id, и обновить count, если строка с client_id и config_id уже имеется
Есть простое решение:
Сделать запрос SELECT..., если результаты есть - обновить, если результатов нет - добавить строку
Но мне уж очень это не нравится и не хочется это делать.
Возможно, можно решить задачу исключительно посредством возможностей БД, не обрабатывая обратный вызов в плагине?
Работоспособность нужна и на mysql, и на sqlite, но хотябы на mysql
Я попробовал определенные способы из гугла, но большинство из них имеют требования - уникальность ключа, коей нет в моем случае
Попытки тыкнуть пальцем в небо:
FormatEx(sBuffer, sizeof(sBuffer), "INSERT INTO `%s` (`config_id`, `client_id`, `count`) VALUES ('227', '1', '7') ON CONFLICT (`config_id` AND `client_id`) DO UPDATE SET `count` = `count` + 7;", g_sTables[TABLE_RES]);
//ON CONFLICT clause does not match any PRIMARY KEY or UNIQUE constraint
FormatEx(sBuffer, sizeof(sBuffer), "INSERT OR IGNORE INTO `%s` (`config_id`, `client_id`, `count`) VALUES ('227', '1', '7') UPDATE `%s` SET `count` = `count` + 7 WHERE `client_id` = '1' AND `config_id` = '227';", g_sTables[TABLE_RES], g_sTables[TABLE_RES]);
//near "UPDATE": syntax error
FormatEx(sBuffer, sizeof(sBuffer), "REPLACE INTO `%s` (`config_id`, `client_id`, `count`) VALUES ('273', '1', `count` + '7');", g_sTables[TABLE_RES]);
//no such column: count
Буду чрезмерно благодарен за подсказки и помощь.