#php #mysql #sql
Допустим, мне нужно добавить в таблицу term массив слов, которые, возможно, уже есть там. Можно сделать так - вынуть все значения из term, найти разницу между массивом слов из БД и массивом, который нужно добавить, после чего закинуть в БД результирующий массив, но хочется добавить нужные значения за один запрос. Можно как-то сделать это?
Ответы
Ответ 1
Вам надо объявить уникальный индекс или сделать первичным ключем поле со "словом", чтобы гарантировать, что дубликат не будет создан даже при сбое в скрипте. Затем, в зависимости от контекста задачи, вы можете выбрать: INSERT IGNORE - не-добавление того, что не должно быть добавлено. если вставляете пачкой несколько строк, IGNORE спасет от отмены всей операции; INSERT ON DUPLICATE KEY UPDATE - при обнаружении дубля, сработает "запасной вариант" с обновлением только того, что укажете; REPLACE - фактически делает DELETE и затем INSERT. Cмотрите: https://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-updateОтвет 2
Если добавляется немного слов, то можно так написать: INSERT INTO ... SELECT (формируется список слов) X(word,...) WHERE word NOT IN(...)Ответ 3
Допустим, есть у нас массив со значениями без ключей - $term = ['a','b','c']: $mysqli = new mysqli('127.0.0.1', 'root', '1111', 'term_base'); for ($i = 0; $i < count($term); $i++){ $check = $mysqli->query("select * from term where `term`='{$term[$i]}' limit 1"); $num = $check->num_rows; if ($num==0){ $ins = $mysqli->query("insert into term values (null, '{$term[$i]}')"); } } Или сделать это следующим образом: $terms = $mysqli->query("select * term from terms"); $terms = $terms->fetch_all(); $diff = array_diff($terms, $term); if ($diff){ for ($i = 0; $i < count($diff); $i++){ $ins = $mysqli->query("insert into term values (null, '{$diff[$i]}')"); } } Можно модифицировать второй вариант и сделать одним запросом: $sql = null; if ($diff){ for ($i = 0; $i < count($diff); $i++){ $sql .= "insert into term values (null, '{$diff[$i]}');"; } $insert = $mysqli->multi_query($sql); }Ответ 4
Если это UPDATE в БД то зачем мучиться?, если поле повторяется ну и пусть, вы замените все значения, даже если они повторяются. Пример: есть: 1,2,3,4 и вы заменяете: 1,2,3,4,5 вы не добавляете!, вы меняете.
Комментариев нет:
Отправить комментарий