2009-11-18 6 views
2

SQL에서이 작업을 수행하는 방법을 잘 모르겠습니다. 여기 의사 코드이다 :SQL에서 Foreach?

  1. 은 ((
  2. term_nodes 값으로 필드 삽입 Y.의 값을 가지고, Y에 대응 TID를 각 노드에 대한 콘텐츠 유형 X.
  3. 와 노드들의리스트를 가지고), 4- (

Y에 대응하는 (TID)가

SELECT `tid` FROM `term_data` WHERE `name` = Y 

(I 주어진다 노드 X))의 NID Drupal 6에서 택 소노 미를 할당하려고합니다.)

어떻게하면됩니까?

답변

5

당신은 정말 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입니다.

2

일반 SQL을 사용할 수 있다면 INSERT/SELECT 문을 사용할 수 없습니까?

INSERT INTO term_nodes(fld, fld2, fld3) 
    SELECT tid, nodeid, 4 FROM term_data WHERE ... ? 
+0

네,하지만 세트의 각 노드에 대해 어떻게해야합니까? –

2
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