INSERT → SELECT

podenik

Новичок
День добрый.
Нужна помощь.
как правильно написать запрос на запись
"INSERT INTO ddata VALUES (NULL,'$date', '$fio', '$tab')
SELECT fio FROM user WHERE tab = '$tab'";
что я не так пишу
в общем
Мне необходимо вставить новые данные в таблицу ddata, но пользователь ввел только 'tab' который находится в другой таблице, по этому 'tab' я должен определить имя 'fio' с таблицы 'user' и записать её (их) в таблицу ddata
 

Фанат

oncle terrible
Команда форума
Учимся пользоваться интернетом

1. Набираем в браузере 4 слова, mysql insert select example
2. В открывшемся окне смотрим:
Первые две ссылки - это документаця, там обычно даются генерализованные примеры, новичку с ними сложно.
По третьей ссылке примерно миллион готовых примеров. Что конкретно из них не ясно?
 

podenik

Новичок
Учимся пользоваться интернетом

1. Набираем в браузере 4 слова, mysql insert select example
2. В открывшемся окне смотрим:
Первые две ссылки - это документаця, там обычно даются генерализованные примеры, новичку с ними сложно.
По третьей ссылке примерно миллион готовых примеров. Что конкретно из них не ясно?
не ясно как правильно писать, может я рахит рукожопый ну я же показал что написал
если даешь ответ, то говори где я тупанул
 

Squats

Новичок
Ну во первых используйте PDO, а во вторых: читайте про объединения таблиц и вложенные запросы.
 

Фанат

oncle terrible
Команда форума
Перевожу на русский: "используйте PDO" это такой сленг пхпешный. Например "используйте htaccess" означает на самом деле "используйте mod_rewrite"
Вот и здесь имелось в виду "используйте подготовленные выражения"

А вот объединения тут действительно не нужны.
Другое дело что на месте автора я бы давно сделал тупо двумя запросами, если одним осилить никак не получается
 

Valick

Новичок
Каким боком подготовленные выражения к текущему вопросу? Ну а в целом подготовленные выражения прекрасно работают и без PDO.
ТС просто не понимает где в запросе надо писать имена полей, а где переменные. Всё это конечно есть в документации, но кто бы её еще читал. Её же дураки для дураков писали.
Мне не трудно написать готовый рабочий запрос, но так увы не интересно.
 

fixxxer

К.О.
Партнер клуба
Ты запутался, где у тебя php, а где sql.

Забудь про php и напиши нужный тебе запрос вручную в SQL-клиенте.
Вот прямо безо всяких переменных напиши, ручками подставь нужное значение $tab в запрос.

И, конечно, никаких values там нет. Вот по этой ссылке подробно объясняют, как устроен инсерт-селект.
 

podenik

Новичок
$result = $mysqli->query(
"INSERT INTO ddata
VALUES (NULL,'$date','$option1', '$option2', '$option3', '$option4',
(SELECT fio FROM user WHERE tab = '$tab'),
'$tab')"
);

Все работает → не так изначально поставил скобки
 

fixxxer

К.О.
Партнер клуба
Это не insert-select, это обычный insert с вложенным select-ом.
Это сработает только если надо добавить ровно ОДНУ запись (то есть если tab уникальный). А для одной можно было бы и из PHP в два запроса сделать, разницы никакой.

И, конечно, тебе бы почитать про SQL-инъекции.
 

podenik

Новичок
Это не insert-select, это обычный insert с вложенным select-ом.
Это сработает только если надо добавить ровно ОДНУ запись (то есть если tab уникальный). А для одной можно было бы и из PHP в два запроса сделать, разницы никакой.

И, конечно, тебе бы почитать про SQL-инъекции.
Спасибо
 

Squats

Новичок
podenik, видимо пытались сделать так?
SQL:
INSERT INTO ddata (column1, date, fio, tab)
SELECT NULL, 1626929969, users.fio, 7
FROM users
WHERE users.tab = 7;
Valick, Ну как минимум, избавляет от головных болей с драйверами и библиотеками.
При этом, как было замечено, использует гибкую схему, на уровне каждого драйвера отдельно.
Ну и, избавляет от раздувания пользовательского кода.
 
Последнее редактирование:
Сверху