我不太清楚如何在SQL中執行此操作。在這裏它是在僞代碼:SQL中的Foreach?
- ,要考慮與內容類型X.
- 對於每個節點的節點列表,採取場Y的值
- INSERT INTO
term_nodes
VALUES((對應於Y TID ),4,(NID節點X))
的(TID對應於Y)由
SELECT `tid` FROM `term_data` WHERE `name` = Y
(I給出的試圖在Drupal 6中分配分類)。
我該怎麼做?
我不太清楚如何在SQL中執行此操作。在這裏它是在僞代碼:SQL中的Foreach?
term_nodes
VALUES((對應於Y TID ),4,(NID節點X))的(TID對應於Y)由
SELECT `tid` FROM `term_data` WHERE `name` = Y
(I給出的試圖在Drupal 6中分配分類)。
我該怎麼做?
你不是真的想這樣做一個foreach。不要將SQL視爲程序性的,就像大多數代碼一樣(您只需要做一件事,然後再做一次,等等)。你需要把它看作基於集合的,你在哪裏可以滿足某些要求的大塊。喜歡的東西:
INSERT INTO term_nodes (tid, x, nid) -- these are the field names
<subquery that selects all the data>
子查詢應該只選擇你要插入的數據,或許是這樣的:
SELECT nodeId, 4, termId FROM nodes WHERE contentType = X
所以把他們放在一起,你會得到:
INSERT INTO term_nodes (tid, x, nid)
SELECT nodeId, 4, termId FROM nodes WHERE contentType = X
無需嘗試遍歷子查詢中的每個元素,並一次插入一個元素,只需一次完成所有元素。
這是我發現的一篇關於Procedural versus Set-Based SQL的好文章,可以幫助您更好地理解這個概念。
如果您可以使用常規SQL,您是否可以不使用INSERT/SELECT語句?
INSERT INTO term_nodes(fld, fld2, fld3)
SELECT tid, nodeid, 4 FROM term_data WHERE ... ?
INSERT INTO `term_nodes` (fld1, fld2, fld3)
SELECT tn.`tid`, 4, n.`nid`
FROM `nodes` n
INNER JOIN `term_nodes` tn ON tn.`name`=n.`Y`
WHERE n.`ContentType`= X
是的,但我怎麼做一個集合中的每個節點? – 2009-11-18 21:04:28