仅当$solution
属于查询$solution[$i][0]
的结果时,我才需要将数组SELECT num_arr FROM Schedule WHERE num_arr<>''
保存到SQL表中。如果它不属于它,则行$ i必须不保存在SQL表中。以下提供的查询似乎不正确。我如何实现所描述的任务?这样做的正确方法是什么?
$query_land = "INSERT INTO `Sequence` (`num_arr`,`start`,`fin`,`way_id`)
VALUES ('".$solution[$i][0]."','".$solution[$i][1]."',
'".$solution[$i][2]."','".$solution[$i][3]."')
WHERE '".$solution[$i][0]."' IN (SELECT num_arr
FROM Schedule
WHERE num_arr<>'')";
答案 0 :(得分:5)
INSERT
声明有两种变体:
INSERT INTO tableX
(a, b, c, ...)
VALUES
(1, 2, 3, ...) ;
和
INSERT INTO tableX
(a, b, c, ...)
SELECT
1, 2, 3
FROM
... ; --- the same or another table or many tables
dual
是一个只有1行的系统表。它可以用于各种事物。在这里使用它,所以VALUES (...)
被重写为SELECT ...
,我们没有任何合适的表放在FROM
子句中:
$query_land = "INSERT INTO `Sequence` (`num_arr`,`start`,`fin`,`way_id`)
SELECT '".$solution[$i][0]."','".$solution[$i][1]."',
'".$solution[$i][2]."','".$solution[$i][3]."'
FROM dual
WHERE '".$solution[$i][0]."' IN (SELECT num_arr
FROM Schedule
WHERE num_arr<>'')";