SQL中的Foreach?

Nic*_*ner 2 sql foreach drupal-6

我不太确定如何在SQL中执行此操作.这是伪代码:

  1. 获取内容类型为X的节点列表.
  2. 对于每个节点,取字段Y的值.
  3. 插入term_nodesVALUES((对应于Y的tid),4,(节点X的nid))

(对应于Y的tid)由下式给出

SELECT `tid` FROM `term_data` WHERE `name` = Y
Run Code Online (Sandbox Code Playgroud)

(我正试图在Drupal 6中分配分类法).

我怎样才能做到这一点?

Rya*_*ins 5

你真的不想做像foreach这样的事情.不要将SQL视为程序性的,就像大多数代码一样(你做一件事,然后是第二件,依此类推).您需要将其视为基于集合,在哪里可以满足某些要求的大块.就像是:

INSERT INTO term_nodes (tid, x, nid) -- these are the field names
<subquery that selects all the data>
Run Code Online (Sandbox Code Playgroud)

子查询应该只选择要插入的所有数据,可能是这样的:

SELECT nodeId, 4, termId FROM nodes WHERE contentType = X
Run Code Online (Sandbox Code Playgroud)

所以把它们放在一起,你得到:

INSERT INTO term_nodes (tid, x, nid)
SELECT nodeId, 4, termId FROM nodes WHERE contentType = X
Run Code Online (Sandbox Code Playgroud)

无需尝试遍历子查询中的每个元素并一次插入一个元素,只需一次完成所有操作即可.

这是一篇关于程序与基于集合的SQL的好文章,它可以帮助您更好地理解这个概念.