вставить или заменить идентификатор существует или отличается

1

У меня есть этот код в php для вставки в базу данных

$sqlx="INSERT INTO bruno_wallet (foto, data, nome, evento,horarios,obs,horas,valorhora,totalparcial,props,id_do_mes,nome_id ) 
VALUES ('$ii', '$data','$nome[0]','$evento' ,'$horarios','$obs','$numeros_horas','$valor_horas','$total_parcial','$props',' $id_postt','$nomeid') " ;

но он всегда вставляет значения новостей. Я хочу: вставить, если его новое и заменить, если старые значения, если он существует

  • 0
    Я бы также предложил улучшить дизайн вашей базы данных, чтобы не было необходимости удалять или заменять его. Это безопаснее (меньше шансов потерять данные).
  • 0
    да, это возможно, если вы используете только первичный ключ, а не любой другой ключ, например, unqieu
Теги:

6 ответов

1
Лучший ответ

Вы можете использовать DUPLICATE KEY UPDATE, если у вас есть только первичный ключ в таблице.

Обратите внимание: если у вас есть другой ключ, например, уникальный ключ и т.д., То он не будет работать.

$sqlx="INSERT INTO bruno_wallet (foto, data, nome, evento,horarios,obs,horas,
    valorhora,totalparcial,props,id_do_mes,nome_id ) 
VALUES ('$ii', '$data','$nome[0]','$evento' ,'$horarios','$obs',
    '$numeros_horas','$valor_horas','$total_parcial','$props','$id_postt','$nomeid') 
ON DUPLICATE KEY UPDATE 
foto = '$ii', data = '$data', nome = '$nome[0]', evento = '$evento', horarios = '$horarios',
obs = '$obs', horas = '$numeros_horas', valorhora = '$valor_horas', 
totalparcial = '$total_parcial', props = '$props', id_do_mes = '$id_postt', nome_id = '$nomeid'
";

Объяснение:

С dev.mysql.com: вы можете использовать функцию VALUES (col_name) в предложении UPDATE, чтобы ссылаться на значения столбца из INSERT-части INSERT... ON DUPLICATE KEY UPDATE

Если foto является первичным ключом, чем после вставки ist каждый раз, когда этот запрос будет обновлять запись.

2

Тогда вы не должны использовать команду INSERT. Сначала найдите, если он уже находится в вашей базе данных, затем вставьте или оставьте его как есть.

1

Если вы используете MYSQL, вы можете использовать INSERT... ON DUPLICATE KEY UPDATE из руководства Mysql

При вставке, где присутствует уникальный ключ, существующая запись будет обновляться с указанными вами полями.

  • 0
    да, ты прав, приятель
1

Привет, это простое и простое решение.

$result = mysql_query("SELECT * FROM bruno_wallet WHERE foto = '$ii' "); //in where condition add whatever condition you want

if( mysql_num_rows($result) > 0) {
    $sqlx = "UPDATE bruno_wallet SET foto ='$ii', data =  '$data', nome = '$nome[0]', evento = '$evento' ,horarios = '$horarios',obs = '$obs',horas = '$numeros_horas',valorhora = '$valor_horas',totalparcial = '$total_parcial',props = '$props',id_do_mes = ' $id_postt',nome_id = '$nomeid'  WHERE foto = '$ii' "; //in where condition add whatever condition you want
}
else
{
  $sqlx="INSERT INTO bruno_wallet (foto, data, nome, evento,horarios,obs,horas,valorhora,totalparcial,props,id_do_mes,nome_id ) 
VALUES ('$ii', '$data','$nome[0]','$evento' ,'$horarios','$obs','$numeros_horas','$valor_horas','$total_parcial','$props',' $id_postt','$nomeid') " ;
}
1

Вы не можете этого сделать, команда INSERT всегда является дополнительной строкой в вашей базе данных. Однако вы можете делать что-то с подзапросами, но лучше использовать это в коде.

Вы должны запустить SELECT, используя столбцы и значения, которые у вас есть. Если существует run else, запустите обновление.

Проблема, которую вы представляете, невозможно решить, поскольку в базе данных не будет ничего, чтобы обновлять, если все столбцы совпадают, я надеюсь, вы поймете, как это будет работать, и что способ, которым вы его намереваетесь, нелогичен. Кроме того, вы не упоминаете, что такое ваши "колонковые столбцы". поэтому, если что соответствует тому, что должно быть обновлением... Если вам необходимо продолжить этот путь, пожалуйста, предоставьте нам дополнительную информацию, чтобы мы могли помочь

0

Самый простой способ решить эту проблему - проверить, уже ли уже отправлены данные в базе данных. Если данные уже в базе данных запускают запрос на обновление и запускают вставку, если нет.

Запустите этот первый

Select * from bruno_wallet where nome_id='$nomeid';

Теперь извлеките данные и установите для любой переменной. Для этого я буду называть его $ info Now run

if(!$info)
{
  "INSERT INTO bruno_wallet (foto, data, nome, evento,horarios,obs,horas,valorhora,totalparcial,props,id_do_mes,nome_id ) 
VALUES ('$ii', '$data','$nome[0]','$evento' ,'$horarios','$obs','$numeros_horas','$valor_horas','$total_parcial','$props',' $id_postt','$nomeid') " ;
 }else{
   Run update query
 }

'

Ещё вопросы

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