Привет.
Есть 3 таблицы, связанные между собой ключами
t1(id, fruit)
t2(idT2, color)
t3(idT3, type)
Нужно добавить в них новую строку, если нет дубликата в поле fruit, либо обновить колонки color и type, если есть, как это сделать?
"INSERT INTO t1 (fruit, color, type)
VALUES ('$fruit', '$color', '$type')
on duplicate key update color = values(color), type = values(type)"
# База данных
$db = new db($config->HostDB, $config->UserDB, $config->PassDB, $config->BaseDB);
// $in_data = array( 'fruit' => 'Груша', 'color' => 'зеленая', 'type' => 'спелая' );
$in_data = array( 'fruit' => 'Картошка', 'color' => 'коричневая', 'type' => 'сырая1' );
$sql = "SELECT EXISTS (SELECT * FROM `t1` WHERE `fruit` = '" . $in_data['fruit'] . "')";
$res = $db->Query( $sql );
$result = $db->FetchRow();
// 0 или 1, НЕ true / false
if ( $result ){
$sql = "UPDATE
`t2`, `t3`, (SELECT `id` FROM `t1` WHERE `fruit` = '" . $in_data['fruit'] . "') AS `t1`
SET
`t2`.`color` = '" . $in_data['color'] . "', `t3`.`type` = '" . $in_data['type'] . "'
WHERE
`t2`.`idT2` = `t1`.`id` AND `t3`.`idT3` = `t1`.`id`
";
$res = $db->Query( $sql );
}else{
$sql = "INSERT INTO `t1` (`id`, `fruit`) VALUES (NULL, '" . $in_data['fruit'] . "');";
$res = $db->Query( $sql );
$lid = $db->LastInsert();
$sql = "INSERT INTO `t2` (`idT2`, `color`) VALUES ('".$lid."', '" . $in_data['color'] . "')";
$res = $db->Query( $sql );
$sql = "INSERT INTO `t3` (`idT3`, `type`) VALUES ('".$lid."', '" . $in_data['type'] . "')";
$res = $db->Query( $sql );
}