Как выполнить вставку в один запрос? - PullRequest
0 голосов
/ 28 сентября 2018

Кадр: сервер MySQL на локальном хосте, использующий сервер XAMPP.

Я пытаюсь вставить все эти поля в определенную таблицу "tbl_labelled_images":

  1. id_in_raw_image_table
  2. изображение
  3. метка
  4. пол

Из них изображение происходит из другой таблицы с именем "tbl_raw_image", а id_in_raw_image_table - это идентификатор этого изображения в таблице"tbl_raw_image".

Тогда метка и пол - это вводимые пользователем данные во время выполнения с помощью переключателей.Но проблема в том, что я не могу вставить все эти четыре атрибута в один запрос.Запрос просто ничего не вставляет в таблицу, если все они находятся в одном запросе.Я пробовал следующие запросы, но ни один из них на самом деле не помог:

$label=mysqli_real_escape_string($conn, $_POST["radio"]);
$gender=mysqli_real_escape_string($conn,$_POST["radio-gender"]);
$query_insert="INSERT INTO labelled_images.tbl_labelled_image
               (`label`,`gender`,`image`, `id_in_raw_image_table`) '$label','$gender',
               SELECT  image, id FROM raw_images.tbl_raw_image
               WHERE raw_images.tbl_raw_image.id = $id_raw";
$insert_exec = mysqli_query($conn, $query_insert);

И

$sql = "SELECT * FROM tbl_raw_image WHERE id IN
    (SELECT id FROM (SELECT id FROM tbl_raw_image ORDER BY RAND() LIMIT 1) t)";
$sth = $conn1->query($sql);
$result=mysqli_fetch_array($sth);
$id=$result['id'];
$image=$result['image'];
$label=mysqli_real_escape_string($conn, $_POST["radio"]);
$gender=mysqli_real_escape_string($conn,$_POST["radio-gender"]);
$query2="INSERT INTO tbl_labelled_image(image, label, id_in_raw_image_table) VALUES('$image','$label','$id'); ";
$rs  = mysqli_query($conn2, $query2);

Но ни один из них не помог мне.В качестве обходного пути я в настоящее время использую сложную двухэтапную вставку следующим образом:

$sql = "SELECT * FROM tbl_raw_image WHERE id IN
    (SELECT id FROM (SELECT id FROM tbl_raw_image ORDER BY RAND() LIMIT 1) t)";
$sth = $conn1->query($sql);
$result=mysqli_fetch_array($sth);
$id=$result['id'];
$image=$result['image'];
$label=mysqli_real_escape_string($conn, $_POST["radio"]);
$gender=mysqli_real_escape_string($conn,$_POST["radio-gender"]);
$query_insert="INSERT INTO labelled_images.tbl_labelled_image
               (`image`, `id_in_raw_image_table`)
               SELECT  image, id FROM raw_images.tbl_raw_image
               WHERE raw_images.tbl_raw_image.id = $id_raw;";
$insert_exec = mysqli_query($conn, $query_insert);
$labelled_id=mysqli_insert_id($conn);
$query_label = "UPDATE labelled_images.tbl_labelled_image SET
               `label` = '$label', `gender` = '$gender' WHERE `id`=$labelled_id";
$label_insert_exec = mysqli_query($conn, $query_label);
$query_update_Is_labelled="UPDATE raw_images.tbl_raw_image SET `Is_labelled`= 1 WHERE id= $id_raw; ";
$update=mysqli_query($conn,$query_update_Is_labelled);

Это работает, но это далеко от идеала.Итак, мой вопрос: есть ли способ выполнить эту вставку за один шаг?Или, в более общем плане, что следует делать, когда различные поля записи для вставки получены из разных источников?

1 Ответ

0 голосов
/ 28 сентября 2018

Вы можете попытаться использовать статическое значение в запросе выбора MySQL SELECT '$label' as label,'$gender' as gender

завершить запрос:

$query_insert="INSERT INTO labelled_images.tbl_labelled_image
    (`label`,`gender`,`image`, `id_in_raw_image_table`)
        SELECT '$label' as label,'$gender' as gender, image, id FROM raw_images.tbl_raw_image
        WHERE raw_images.tbl_raw_image.id = $id_raw
    ";

Отредактировано: удалить VALUES () до SELECT

...