Избегайте дублирования SQL-ВСТАВКИ для значения столбца на основе другого значения столбца

#php #mysql #insert #duplicates

Вопрос:

Не уверен, что вопрос достаточно ясен, поэтому любые рекомендации приветствуются.

У меня есть следующая таблица:

 Table1
----------
ID   fk_soc   fk_product   value
1    365      20           654896
2    365      21           654897
3    365      25           654898
4    820      20           114352
5    820      21           114381
6    820      25           114382
 

Как вы можете видеть, во втором столбце у меня может быть один и тот же fk_product номер для другого идентификатора клиента. Но как я могу избежать дублирования записи fk_product для одного и того же клиента? Т. е. избежать

 Table1
----------
ID   fk_soc   fk_product   value
1    365      20           654896
2    365      20           whatever_here
 

Если я установлю fk_product как уникальный, я не смогу вставить запись для другого клиента. Записи вставляются с помощью обычной SQL-вставки В HTML-форму и поступают из нее:

 INSERT INTO Table1 (fk_soc, fk_distributor_product_code, fk_product)
VALUES (
    ' . $this->db->escape($this->fk_line) . ',
    ' . $this->db->escape($this->value) . ',
    ' . $this->db->escape($this->fk_product) . '
)
 

Я пробовал использовать:

 INSERT INTO Table1 (fk_soc, fk_distributor_product_code, fk_product)
VALUES (
    ' . $this->db->escape($this->fk_line) . ',
    ' . $this->db->escape($this->value) . ',
    ' . $this->db->escape($this->fk_product) . '
)
    WHERE NOT EXISTS (
        SELECT ' . $this->db->escape($this->fk_product) . '
        FROM table WHERE fk_soc= ' . $this->db->escape($this->fk_soc) . '
 

но таким образом запись не вставляется

Комментарии:

1. Создайте уникальный составной индекс по этим 2 столбцам. CREATE UNIQUE INDEX idx ON table1 (fk_soc, fk_product);

2. @Akina, это сработало. Спасибо.