如何在一个查询中执行insert?

cwdobuhd  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(346)

框架:本地主机上使用xampp服务器的mysql服务器。
我正在尝试将所有这些字段插入一个特定的表“tbl\u labelled\u images”:
原始图像表中的id
形象
标签
性别
其中,image来自另一个名为“tbl\u raw\u image”的表,id\u in\u raw\u image\u table是“tbl\u raw\u image”表中该映像的id。
然后label和gender是用户在运行时使用单选按钮进行的输入。但问题是我不能在一个查询中插入所有这四个属性。如果所有查询都在同一个查询中,则查询不会在表中插入任何内容。我尝试过以下查询,但都没有实际帮助:

$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);

这是可行的,但离理想还很远。所以我的问题是,有没有办法一步到位?或者更一般地说,当要插入的记录的不同字段来自不同的源时,应该怎么做?

zmeyuzjn

zmeyuzjn1#

您可以尝试在mysql select查询中使用静态值 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()

相关问题