Как заполнить Foreign Key?

Илья55
Дата: 12.02.2013 18:22:43
есть две таблицы один ко многим t1(idt1,поле1) t2(idt2,поле1,поле2...fk_idt1),idt1 и idt2:autoincrement
как мне заполнить fk_idt1 из idt1

делаю

insert into t2 (fk_idt1)
select idt1 from t1
where t2.поле1=t1.поле1

пишет

unknown column t2.поле1 in where clause
Akina
Дата: 12.02.2013 18:26:15
Правильно. Часть SELECT запроса не содержит в списке таблиц t2.
Да и вообще глупость... с какой записью в таблице t2 ты намерен сравнивать, есть ты её только собираешься вставить?
Илья55
Дата: 12.02.2013 18:52:21
Хорошо, а как лучше организовать insert(запись) fk_idt1 если t1 заполнена и условием могут быть поле:дата, поле1 обеих таблиц
t1(idt1,дата,поле1) t2(idt2,дата,поле1,поле2...fk_idt1),idt1 и idt2:autoincrement.

Или у меня концептуально что-то нет так?

Вообще задача заполнить обе таблицы данными из файла, при условии что idt1,idt2:autoincrement, подскажите запрос?
Вроде классический пример, но не могу найти в сети.
Akina
Дата: 12.02.2013 21:27:26
Как не было ни хрена не понять, так и осталось.
Пример исходных данных и желаемого результата в студию, что ли...
qwerty112
Дата: 12.02.2013 21:34:40
Илья55
Хорошо, а как лучше организовать insert(запись) fk_idt1 если t1 заполнена и условием могут быть поле:дата, поле1 обеих таблиц
t1(idt1,дата,поле1) t2(idt2,дата,поле1,поле2...fk_idt1),idt1 и idt2:autoincrement.

Или у меня концептуально что-то нет так?

Вообще задача заполнить обе таблицы данными из файла, при условии что idt1,idt2:autoincrement, подскажите запрос?
Вроде классический пример, но не могу найти в сети.

здаётся мне, ТС ищет UPDATE

---
update t1 inner join t2
on t2.поле1=t1.поле1
set t2.fk_idt1 = t1.idt1

оно ?
Илья55
Дата: 13.02.2013 13:46:23
Спасибо qwerty112! Так подойдет. Получилось так, напомню есть две таблицы один ко многим t1(idt1,поле1,поле2,поле3...) t2(idt2,поле1,поле2,поле3...fk_idt1),idt1 и idt2:autoincrement,
задачача заполнить fk_idt1 таблицы t2 из t1 idt1; idt1 и idt2:autoincrement:

1.Заполняю t1

insert into t1(поле1, поле2,поле3)
values(...,...,...),
.
.
. (...,...,...);
2.Заполняю t2

insert into t2(поле1, поле2,поле3)
values(...,...,...),
.
.
. (...,...,...);
3.Обновляю fk_idt1 таблицы t2 по условию что t1.поле1=t2.поле1 и t1.поле2=t2.поле2

update t2 inner join t1
on t1.поле1=t2.поле1 and t1.поле2=t2.поле2
set t2.fk_idt1=t1.idt1
rybachok91
Дата: 07.09.2017 00:08:23
Здравствуйте! Обращаюсь к Вам от безысходности.... Я новичок в mysql и что-то мне тяжело дается тема вставки данных в таблицу, в которой имеется поле с внешним ключом. Есть 2 таблицы: users и cities. Поля users: user_id (AI primary), user_name, user_age, city_id. Поля cities: city_id (AI primary), city_name. city_id из cities - внешний ключ для users. Таблица cities заполнена, a users нужно заполнить через отправку данных с формы, причем город выбирается из выпадающего списка. Я делаю запрос в php:

INSERT INTO users (user_name, user_age, city_id) SELECT city_id FROM cities WHERE city_name = '".$_POST['user_city']. "';

А в ответ ошибка:

Ошибка вставки данных в таблицу users: Column count doesn't match value count at row 1.

И как не старайся, не получается, всегда ошибка. Помогите.....
Akina
Дата: 07.09.2017 07:43:53
rybachok91
в ответ ошибка:

Ошибка вставки данных в таблицу users: Column count doesn't match value count at row 1.

Ну правильно... сколько полей вставляется? считаем:
INSERT INTO users (user_name /* 1 */, user_age /* 2 */, city_id /* 3 */)

А сколько выбирается запросом?
SELECT city_id /* 1 */

насколько я помню курс начальной школы, 3 и 1 не равны. О чём и сообщает сервер.

Но это полбеды. Даже если довести запрос до ума, он не выполнит того, что хочется. Тебе же хочется взять существующую запись для некоего юзера с пустым полем города, и изменить в ней значение города на нужное. В то время как INSERT вставит НОВУЮ запись, а существующая так и останется с пустым полем города. Т.е. запрос должен быть на обновление, а не пополнение, данных. Причём на обновление только одной записи, именно той, юзер из которой в данный момент отображается на форме. Что-то типа
UPDATE users, cities
SET users.city_id = cities.city_id
WHERE users.user_name = $_POST['user_name']
  AND cities.city_name = $_POST['user_city']
rybachok91
Дата: 07.09.2017 12:32:55
Akina, спасибо Вам, что ответили. Я делаю отправку и прием данных через AJAX. Сначала принимаю список городов, а потом отправляю информацию о пользователях. И сейчас мне "success" возвращает пустое окошко. Я не могу сообразить, что не так. Помогите.....
rybachok91
Дата: 07.09.2017 12:41:12
Akina, т.е. если мне возвращает alert окно, значит, данные должны попасть в таблицу. А их нет, и ошибок нет(((