День добрый. Нужна помощь. как правильно написать запрос на запись "INSERT INTO ddata VALUES (NULL,'$date', '$fio', '$tab') SELECT fio FROM user WHERE tab = '$tab'"; что я не так пишу
Если надо вставить то, что добывает select, значит здесь фраза values() лишняя. Если надо вставить конкретные перечисленные значения, то здесь лишний select. Определись уже. --- Добавлено --- Либо INSERT VALUES, либо INSERT SELECT
Мне необходимо вставить новые данные в таблицу ddata, но пользователь ввел только 'tab' который находится в другой таблице, по этому 'tab' я должен определить имя 'fio' с таблицы 'user' и записать её (их) в таблицу ddata
Сначала нужно проверить корректность (существование) $tab отдельным запросом SELECT. Потом или INSERT... SELECT..., или просто INSERT с данными, полученными в результате первого запроса.
Подсказка: во фразе SELECT можно писать "константы", а не только данные из таблицы. Типа "INSERT ... SELECT NULL, user.fio, '$tab' FROM user ... WHERE ..." я сознательно не останавливаюсь на проблеме sql injection, надеюсь ты сам в курсе --- Добавлено --- Если SELECT найдёт несколько записей, подходящих под условие, то они добавятся все Если SELECT не найдёт запись, подходящую под условие, то не добавится ничего. Так что возможно, не надо отдельно ничего проверять - зависит от задачи.
По-моему лучше перечислить имена «добавляемых полей» после имени таблицы в INSERT, чем писать SELECT NULL
$result = $mysqli->query( "INSERT INTO ddata VALUES (NULL,'$date','$option1', '$option2', '$option3', '$option4', (SELECT fio FROM user WHERE tab = '$tab'), '$tab')" ); that all
Для какого-нибудь колледжа, может, и сойдет. Для реальных применений вряд ли. NULL в fio мало кому интересно видеть. --- Добавлено --- И все же принято явно указывать имена «добавляемых полей», а то кто-то когда-то «случайно» поменяет порядок полей и наступит полный «that all»
@miketomlin как-то звучит дико "добавляемых полей" в insert мы не можем добавлять поля, только записи. Поля можно добавить в alter table ))) Хорошо бы в insert перечислить поля, куда будут записываться значения, это да. Если понадеяться на некий порядок, можно внезапно™ в этом месте получить ошибку в будущем. Типа работало и перестало. Самый стрёмный вид ошибок. Итого: Код (Text): INSERT INTO alfa(aj_nane, nane) SELECT beta.x, null FROM beta WHERE beta.y = :yyyyy А это другой вид прикопаных грабелек ))) Такая конструкция выдаст ошибку если вдруг WHERE tab = '$tab' будет соответствовать более чем одной записи.
@artoodetoo, специально взял в кавычки. Думал этого достаточно, чтобы все поняли, о чем речь. А речь именно об этом: --- Добавлено --- Не веришь, глянь на мой пред. пост, адресованный ТСу. Я там про эти «добавляемые поля» писал то же самое, что потом написал ты: --- Добавлено --- Согласен, что не самое вменяемое название. В первый раз воткнул и слово «значений», но тоже получилось как-то нескладно, поэтому решил взять в кавычки и не париться. Кому надо, поймут или переспросят