вставка новой записи в связанные таблицы

vipron

Новичок
вставка новой записи в связанные таблицы

Eсть три таблицы

не могу понять как составить sql запрос на добавление нового дома т.к если при вводе есть такая улица то в house.id_st должен быть id этой улицы, если нет но вначале добавляем эту улицу в таблицу streets а потом берем этот айдишник и записываем в house.id_st так же и с типом домов.
 

Beavis

Banned
Проверь, есть ли такая улица.. Если есть, получи её идентификатор (это можно совместить с проверкой).
Если нет, добавь, и получи идентификатор.
А потом добавляй дом.
 

MuXaJIbI41981

Новичок
А почему нельзя определить улицы которых нет в базе и типы зданий. Добавить их ... а потом вставить все дома без проблем. Так будет и запросов меньше помоему.
 

vipron

Новичок
Написал часть для добавление улицы
PHP:
$St – хранится введенная улица  
$result = mysql_query ("SELECT streets.id FROM streets WHERE streets.street='$st'",$conn);
if ($result=='NULL')
{
	$myrow = mysql_fetch_array($result);
	echo $myrow[id];
	$is_s=$myrow[id];
}
else
{
  mysql_query("INSERT INTO streets (street) values ('$st')");
  $is_s=mysql_insert_id();
  }
$is_s теперь хранится id улицы
Кажется что получилось много кода для такого маленького действия, не изобретаю ли я велосипед
как нибудь можно это оформить в виде одного sql запроса ?
 

DiMA

php.spb.ru
Команда форума
1. Параллельный скрипт может вклиниться между двумя запросами и первым вставить улицу, следовательно второй упадет (если будет уникальный индекс) или создаст клона

2. Куда короче-то?
Я бы написал так
$street=$db->value("SELECT streets.id FROM streets WHERE streets.street='$st'");
if ($street) $db->query(...)
или
$streets=$db->line("SELECT * FROM streets WHERE streets.street='$st'");
if ($streets['id']) $db->query(...)

Или ты хочешь через один запрос, INSERT ... SELECT ?
 

zerkms

TDD infected
Команда форума
1. Параллельный скрипт может вклиниться между двумя запросами и первым вставить улицу, следовательно второй упадет (если будет уникальный индекс) или создаст клона

2. Куда короче-то?
Я бы написал так
$street=$db->value("SELECT streets.id FROM streets WHERE streets.street='$st'");
а в твоём варианте вклиниться он не может да? :)
 

vipron

Новичок
что то я не правильное условие написал
if ($result=='NULL')
все время происходит добавление


Или ты хочешь через один запрос, INSERT ... SELECT ?
да хотелось бы один запрос

$street=$db->value("SELECT streets.id FROM streets WHERE streets.street='$st'");
не могли бы поянить что это значит
$db я так понял идентификатор соединения
что за функция value
 
Сверху