Как правильно создать INSERT с проверкой на совпадение?

В базе есть две таблицы:

sellers
objects
28489691a40e4351865b63e40930d3ab.PNG

Каждый seller может иметь много objects, каждый object - только один seller. Это понятно.

Проверять объекты на совпадение, думаю смысла нет, но вот продавцов стоит.

Как сделать скрипт, который при отправке формы, сохраняет объекты и продавцов в базу при этом проверяя на совпадение. И если, ни объекта ни продавца нет в базе, то соответственно делает запись, в поле sellers_id добавляет ИД только что добавленого продавца и возвращает что то типо - " Новый объект и продавец успешно добавленны" НО если такой продавец есть в базе То, добавляет только объект, ему опять же добавляет ИД продавца и возвращает - "Продавцу $name был добавлен новый объект"

48a6acb1753146ac823607033c877699.PNG

Вот таким вот скриптом добавляю продавца и объект если продавца еще нет в базе, если есть то ERROR. Подскажите как правильно прописать проверку,

UPD
if ((isset($_POST['first_name'])) && (isset($_POST['last_name'])) && (isset($_POST['phone'])))  {
	$first_name = $_POST['first_name'];
	$last_name = $_POST['last_name'];
	$phone = $_POST['phone'];

	$city = $_POST['city'];
	$district = $_POST['district'];
	$street = $_POST['street'];
	$street_number = $_POST['street_number'];
	$floor = $_POST['floor'];
	$room = $_POST['room'];
	$space = $_POST['space'];
	$living_space = $_POST['living_space'];
	$kitchen_space = $_POST['kitchen_space'];
	$status = $_POST['status'];
	$equipment = $_POST['equipment'];
	$information = $_POST['information'];
	$price = $_POST['price'];

	$view_db = "SELECT * FROM sellers WHERE first_name ='$first_name' AND last_name = '$last_name' AND phone ='$phone'";

	if(@mysql_num_rows(mysql_query($view_db))==0){
		
		$sql = "INSERT IGNORE INTO sellers (first_name, last_name, phone) VALUES ('$first_name', '$last_name', '$phone')";
		$result=mysql_query($sql);
		
		
		$sql_objects = "INSERT INTO objects (city, district, street, street_number, floor, room, space, living_space, kitchen_space, status, equipment, information, price, sellers_id) VALUES ('$city','$district','$street','$street_number','$floor','$room','$space','$living_space','$kitchen_space','$status','$equipment','$information','$price',LAST_INSERT_ID())";
		$res=mysql_query($sql_objects);

		header("Location: ok.php");
	} else {
		echo "ERROR!";
	}
}
  • Вопрос задан
  • 1751 просмотр
Пригласить эксперта
Ответы на вопрос 4
@maxyc_webber
Web-программист
INSERT IGNORE INTO не поможет вам в решении?
ну или ON DUPLICATE KEY UPDATE
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Если надо именно проверять - то через транзакции.
start transaction;
SELECT ... FROM ... FOR UPDATE;
проверяете что нужно
UPDATE ... SET ...; 
COMMIT;
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
ALTER TABLE `sellers` 
    ADD UNIQUE `seller` (`first_name`, `last_name`, `phone`);

INSERT IGNORE INTO `sellers` (`firt_name`, `last_name`, `phone`) 
    VALUES (:firstName, :lastName, :phone);

SELECT `id` FROM `sellers` 
    WHERE `first_name` = :firstName
        AND `last_name` = :lastName
        AND  `phone` = :phone;

INSERT INTO `objects` ...

После первого инсерта можно проверить last_insert_id, если он есть, то селект можно и не делать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы