У меня есть этот код в 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') " ;
но он всегда вставляет значения новостей. Я хочу: вставить, если его новое и заменить, если старые значения, если он существует
Вы можете использовать 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 каждый раз, когда этот запрос будет обновлять запись.
Тогда вы не должны использовать команду INSERT
. Сначала найдите, если он уже находится в вашей базе данных, затем вставьте или оставьте его как есть.
Если вы используете MYSQL, вы можете использовать INSERT... ON DUPLICATE KEY UPDATE из руководства Mysql
При вставке, где присутствует уникальный ключ, существующая запись будет обновляться с указанными вами полями.
Привет, это простое и простое решение.
$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') " ;
}
Вы не можете этого сделать, команда INSERT всегда является дополнительной строкой в вашей базе данных. Однако вы можете делать что-то с подзапросами, но лучше использовать это в коде.
Вы должны запустить SELECT, используя столбцы и значения, которые у вас есть. Если существует run else, запустите обновление.
Проблема, которую вы представляете, невозможно решить, поскольку в базе данных не будет ничего, чтобы обновлять, если все столбцы совпадают, я надеюсь, вы поймете, как это будет работать, и что способ, которым вы его намереваетесь, нелогичен. Кроме того, вы не упоминаете, что такое ваши "колонковые столбцы". поэтому, если что соответствует тому, что должно быть обновлением... Если вам необходимо продолжить этот путь, пожалуйста, предоставьте нам дополнительную информацию, чтобы мы могли помочь
Самый простой способ решить эту проблему - проверить, уже ли уже отправлены данные в базе данных. Если данные уже в базе данных запускают запрос на обновление и запускают вставку, если нет.
Запустите этот первый
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
}
'