MYSQL: выпуск нескольких строк для одной и той же записи.

0

Даже после использования запроса select я получаю несколько строк, вставленных с тем же именем.

Ниже приведен пример аналогичного кода, для которого я столкнулся с вышеуказанной проблемой.

$current_timestamp=date('Y-m-d H:i:s'); //current date-time

$query = "SELECT * FROM table WHERE name = 'variable name' ";
$result=try_mysql_query($link, $query);

if(mysqli_num_rows($result)) 
{
    $updatequery = "UPDATE account_extension SET 
     updated_at = '$current_timestamp' WHERE name = 'variable name'";
    $result = try_mysql_query($link, $updatequery);
} 
else
{
    $insertsql="INSERT INTO table('name','updated_at') 
    VALUES ('variable name','$current_timestamp')";
    $result = try_mysql_query($link,$insertsql);
}
Теги:
mysqli
sql-insert

2 ответа

0

Правильный способ сделать это в MySQL - это один оператор.

Во-первых, вам нужен уникальный индекс:

create unique index ind_ account_extension_name on account_extension(name);

Затем вы можете:

insert into account_extension(name, updated_at)
    values (?, ?)
    on duplicate key update updated_at = values(updated_at);

Обратите внимание, что я также заменил переменные на заполнители параметров. Использование параметров - это правильный способ передачи значений в запрос.

В чем преимущества этого подхода?

  • Это упрощает кодирование приложения.
  • База данных обеспечивает уникальное ограничение, поэтому оно является многопоточным.
  • Уникальность name гарантируется независимо от того, как поле может быть вставлено или обновлено.
  • 0
    Спасибо за Ваш ответ. Я полностью понимаю ваш подход, но я должен у вас кое-что спросить. Есть ли какая-либо ошибка или ошибка в моем методе, которая должна приводить к дублированию записи? Поскольку в этой таблице миллионы строк, я не создал уникальный индекс ключа для этой таблицы. Так как это увеличит сложность выполнения того же метода.
  • 0
    @ Аксар. , , Понятия не имею, что вы подразумеваете под сложностью. Один оператор SQL кажется мне намного проще, чем три оператора SQL, с усложнением условной логики. Позвольте базе данных обеспечить целостность данных, когда это возможно.
Показать ещё 7 комментариев
-1

Обновите строку ниже в своем коде:

$query = "SELECT * FROM table WHERE name = 'variable name' ";

С

$query = "SELECT * FROM table WHERE name like '%variable name%' ";

Надеюсь это поможет

Ещё вопросы

Сообщество Overcoder
Наверх
Меню