2012-08-29 185 views
1

只有當$solution[$i][0]屬於查詢結果SELECT num_arr FROM Schedule WHERE num_arr<>''時,我需要將數組$solution保存到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<>'')"; 

回答

5

INSERT statment有兩個變化:

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<>'')"; 
+0

+ 1 * *好答案! – Fluffeh

+0

@ypercube:什麼是你的代碼中的「雙重」?數組解決方案的值不會存儲在任何其他SQL表中。 –

+1

@YouKuper:DUAL表是默認存在於所有MySQL數據庫安裝中的特殊的單行表 –