我不太清楚如何在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