预备语句插入选择两个表

时间:2016-01-04 14:05:37

标签: mysql

enter image description here我使用准备好的声明将表1 中的数据插入表2 表1的副本

唯一的区别是表格2 有一个DateTime列。我正在尝试将表1 中的数据插入表2 。但是如何添加日期时间(当前时间和日期)?

我对如何将其添加到我准备好的陈述中感到有点蠢。

DECLARE sqlquery text;
SET sqlquery = CONCAT('insert into partial_log select inaid, `PartNo`,`LineCode`,`EPartsPartNo`,`Surcharge`,`Price`,`CustomerDescription`,`ShortCode`,`PlusCode`,`LiveDate`,`CustomerPartNo`,`Alt1LineCode`,`Alt1PartNo`,`Alt1EPartsPartNo`,`Alt2LineCode`,`Alt2PartNo`,`Alt2EPartsPartNo`,`Alt3LineCode`,`Alt3PartNo`,`Alt3EPartsPartNo`,`Alt4LineCode`,`Alt4PartNo`,`Alt4EPartsPartNo`,`Alt5LineCode`,`Alt5PartNo`,`Alt5EPartsPartNo`,`Alt6LineCode`,`Alt6PartNo`,`Alt6EPartsPartNo`,`Alt7LineCode`,`Alt7PartNo`,`Alt7EPartsPartNo`,`Alt8LineCode`,`Alt8PartNo`,`Alt8EPartsPartNo`,`Alt9LineCode`,`Alt9PartNo`,`Alt9EPartsPartNo`,`Alt10LineCode`,`Alt10PartNo`,`Alt10EPartsPartNo`,',NOW(),',FROM itable order by `LineCode`,`PartNo`;');
set sqlquery=REPLACE(sqlquery,'inaid',inaid);
set sqlquery=REPLACE(sqlquery,'itable',itable);

SET @stat = sqlquery;
PREPARE stmt from @stat;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

我尝试使用concat添加Now(),但这不起作用并抛出无效的语法错误。 #42000您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在'14:00:06附近使用正确的语法,在第{1}行的LineCodePartNo'之后使用

更新 不需要CONCAT将NOW()添加到语句中。

DECLARE sqlquery text;
SET sqlquery = 'insert into partial_log select inaid, `PartNo`,`LineCode`,`EPartsPartNo`,`Surcharge`,`Price`,`CustomerDescription`,`ShortCode`,`PlusCode`,`LiveDate`,`CustomerPartNo`,`Alt1LineCode`,`Alt1PartNo`,`Alt1EPartsPartNo`,`Alt2LineCode`,`Alt2PartNo`,`Alt2EPartsPartNo`,`Alt3LineCode`,`Alt3PartNo`,`Alt3EPartsPartNo`,`Alt4LineCode`,`Alt4PartNo`,`Alt4EPartsPartNo`,`Alt5LineCode`,`Alt5PartNo`,`Alt5EPartsPartNo`,`Alt6LineCode`,`Alt6PartNo`,`Alt6EPartsPartNo`,`Alt7LineCode`,`Alt7PartNo`,`Alt7EPartsPartNo`,`Alt8LineCode`,`Alt8PartNo`,`Alt8EPartsPartNo`,`Alt9LineCode`,`Alt9PartNo`,`Alt9EPartsPartNo`,`Alt10LineCode`,`Alt10PartNo`,`Alt10EPartsPartNo`, NOW() FROM itable order by `LineCode`,`PartNo`;';
set sqlquery=REPLACE(sqlquery,'inaid',inaid);
set sqlquery=REPLACE(sqlquery,'itable',itable);

SET @stat = sqlquery;
PREPARE stmt from @stat;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

1 个答案:

答案 0 :(得分:0)

CONCAT是完全没必要的,只会增加你的困惑。

您的查询可以像这样写

$string="22-22";
$finalResults = array();

$sql = "SELECT * FROM price WHERE  info like '%$string%'";
$array = mysqli_query($sql,$con);
while($row=mysqli_fetch_array($array)){
    $info = $rows['info'];
    $result = explode(",", $info);
    $search = array_filter($results, function($item) use ($string) {
        return ( strpos($item, $string) !== false );
    });
    if (!empty($search[0])){
        $finalResults[] = $search[0];
    }
}

实际上只要SET sqlquery = 'insert into partial_log select inaid, `PartNo`,`LineCode`, `EPartsPartNo`,`Surcharge`,`Price`, `CustomerDescription`,`ShortCode`,`PlusCode`, `LiveDate`,`CustomerPartNo`,`Alt1LineCode`, `Alt1PartNo`,`Alt1EPartsPartNo`,`Alt2LineCode`, `Alt2PartNo`,`Alt2EPartsPartNo`,`Alt3LineCode`, `Alt3PartNo`,`Alt3EPartsPartNo`,`Alt4LineCode`, `Alt4PartNo`,`Alt4EPartsPartNo`,`Alt5LineCode`, `Alt5PartNo`,`Alt5EPartsPartNo`,`Alt6LineCode`, `Alt6PartNo`,`Alt6EPartsPartNo`,`Alt7LineCode`, `Alt7PartNo`,`Alt7EPartsPartNo`,`Alt8LineCode`, `Alt8PartNo`,`Alt8EPartsPartNo`,`Alt9LineCode`, `Alt9PartNo`,`Alt9EPartsPartNo`,`Alt10LineCode`, `Alt10PartNo`,`Alt10EPartsPartNo`, NOW() FROM itable order by `LineCode`,`PartNo`;'); partial_log tabless中的列都具有相同的顺序,而itable末尾只添加了新列datetime你可以写这样的查询

partial_log