sql 질문입니다! 여러개의 글 변환..
드루팔에서 블로그를 포럼 글로 바꾸는 과정에서, 다음과 같이 DB를 건드릴 일이 있습니다.
일단 과정은 알아낸 것 같은데, 이를 sql로 표현하는 것이 어렵군요.
주어지는 값 : category# / forum#
0. find target
select n.nid,vid from node as n,term_node as t where n.nid=t.nid and t.tid={category#}
for each result,
1. change type
update node set type='forum' where nid={current nid}
2. add forum info to forum table
insert into forum values ({current nid},{current vid},{forum#});
// forum의 tid는 forum의 번호입니다. (forum/6이면 6..)
3. add forum info to term_data
insert into term_node values ({current nid},{forum#});
이런 작업을 해야 하는데, 이를 php으로 결과를 받아서 이러쿵저러쿵하기는 양도 많고 번거로운 것 같아, SQL만으로 해결하려고 합니다.
다음과 같이 짰는데, mysql의 서브쿼리 제한에도 걸리고.. 더 잘 짤 수 있을 것 같은데 도와주세요 ㅠㅠ
{category#} = 4
{forum#} = 6 이라고 할때 다음과 같이 짰는데, 실제 MySQL4.1에서는 subquery 제약으로 insert와 update는 되지 않는 것 같습니다.
SELECT nid,vid,4 FROM node WHERE type='blog' AND nid IN (SELECT nid FROM term_node WHERE tid=4);
INSERT INTO forum VALUES (SELECT nid,vid,6 FROM node WHERE type='blog' AND nid IN (SELECT nid FROM term_node WHERE tid=4));
INSERT INTO term_node VALUES (SELECT nid,6 FROM node WHERE type='blog' AND nid IN (SELECT nid FROM term_node WHERE tid=4));
UPDATE node SET type='forum' WHERE nid IN (SELECT nid FROM node WHERE type='blog' AND nid IN (SELECT nid FROM term_node WHERE tid=4));
음. 어떻게 하면 좋을까요?
방향을 잘못 잡은 듯...
위의 sql만으로 한다는 것이 동작의 성패 여부를 떠나, SELECT를 저렇게 쓰는 것 자체만으로도 방향을 잘못 잡은 듯 합니다. 0부터 3까지로 요약한 방법에서 자료를 읽는 건 수와 하고자 하는 sql 구문에 의한 자료의 읽는 건 수를 비교해 보시면 방향을 다시 생각하는 것이 좋을 듯 합니다.
----
I paint objects as I think them, not as I see them.
Ubuntu Dapper user / Ubuntu KoreanTeam / Lanuchpad karma 16289
----
I paint objects as I think them, not as I see them.
atie's minipage
어떻게 접근하면
어떻게 접근하면 좋을까요? SELECT를 저렇게 쓴다는 것은, 한 번만 사용되는 내용을 여러차례 쿼리를 한다는 점이 맞나요?
고급언어를 사용하면 좋겠는데.. python을 이용한다거나.. 그 쪽은 제가 잘 몰라서 도와주시면 감사하겠습니다.
sql로만 하려는 이유는. 고급언어를 사용하게 되면 최초 쿼리 결과를 메모리로 받아올 텐데 여기에서 오류가 나지 않을까 걱정했기 때문입니다. sql의 경우 그런 경우를 알아서 처리를 해주겠지만..
이 문제는 현재
이 문제는 현재 kldp에서 바로 일어나고 있는 문제를 해결하기 위한 내용입니다. 목적은 예를 들어 현재 블로그로 분류되어 있는 노드들을 모두 포럼 게시판의 적절한 곳으로 옮기는 것입니다. 예를 들어 현재 블로그로 분류되어 있는 노드들 중에서 '뉴스' 카테고리로 분류되는 노드들을 모두 '뉴스 / 새소식' 포럼(게시판)으로 옮기기 위한 것입니다. 혹 방법을 아시는 분이 계시면 도움 부탁드리겠습니다.
감사합니다... 아울러 살펴봐 주시고 이렇게 글까지 올려서 확인해봐 주고 계신 lacovnk님께도 특별히 감사의 말씀을 드립니다. 위의 쿼리는 원래 오늘 해 보려고 했던 것인데 시간이 없어서 못해 봤습니다. 내일(화요일) 저녁쯤에 시간을 내서 확인해 보겠습니다. 물론 그전에 다른 좋은 방법이 나오면 더 좋겠고요...
mysql 의 제약때문에
mysql 의 제약때문에 sql 만으로는 어려울 것 같네요.
다음과 같이
다음과 같이 해결하려고 합니다.
파이썬 마을에도 올려두었습니다.
http://bbs.python.or.kr/viewtopic.php?t=22054
어떤 방법이 또 있을까요?
kldp 서버의 사정상
kldp 서버의 사정상 php를 사용하여야 하는데 혹시 이 코드를 php로 변환해 주실 분 안계신가요~~
$db_host =
$db_host = 'localhost';
$db_user = '';
$db_passwd = '';
$db_name = '';
$num_category = 4;
$num_forum = 6;
$db = mysql_connect($db_host,$db_user,$db_passwd);
mysql_select_db($db_name,$db);
$result = mysql_unbuffered_query("SELECT nid,vid FROM node WHERE
type='blog' AND nid IN (SELECT nid FROM term_node WHERE
tid='{$num_forum}');");
while($cur = mysql_fetch_row($result))
{
mysql_query("INSERT INTO forum VALUES
('{$cur[0]}','{$cur[1]}','{$num_forum}');");
mysql_query("INSERT INTO term_node VALUES
('{$cur[0]}','{$num_forum}');");
mysql_query("UPDATE node SET type='forum' WHERE nid='{$cur[0]}';");
}
mysql_close($db);
댓글 달기