2010-11-29 8 views
0

최신 MySQL을 사용하고 있습니다.MySQL에서 SELECT를 사용하여 UPDATE를 사용하는 방법

나는 두 개의 테이블 : backlinkspages을 가지고 있습니다.

cache_links이라는 열을 특정 URL에 대해 pages 테이블에서 업데이트하려고합니다. 열은 backlinks의 행 수와 같아야합니다. 여기서 destination = url입니다.

나는 경우에, 지금처럼 내 응용 프로그램 언어에서이 작업을 수행 할 수 있는지 내가 할 말은 분명하지 않다 :

$myURL = "http://google.com/"; 

$numLinksResult = mysqli_query($c, "SELECT count(*) AS `num` FROM `backlinks` WHERE `same_domain` = FALSE AND `url` = '$myURL'"); 
$numLinksRow = mysqli_fetch_assoc($numLinksResult); 
$numLinks = $numLinksRow['num']; 

mysqli_query($c, "UPDATE `pages` SET `links` = $numLinks WHERE `url` = '$myURL'"); 

나는 현재 구축을 위해 노력했습니다 쿼리는 다음과 같습니다

UPDATE `pages`, `backlinks` SET pages.`cache_links` = backlinks.count(*) 
    WHERE backlinks.`destination` = pages.`url` 
     AND backlinks.`same_domain` = FALSE 
     AND pages.`url` = 'http://google.com/' 

문제는 제 생각에는 backlinks.count(*)입니다. 나는 내가 뭘 잘못하고 있는지 전혀 모른다. 내가 얻는 오류는 다음과 같습니다.

#1064 - You have an error in your SQL syntax; check the manual that corresponds 
to your MySQL server version for the right syntax to use near '*) 
WHERE backlinks.`destination` = pages.`url` AND backlinks.`same_' at line 1 

모든 도움을 주실 수 있습니다. 엄청 고마워!

답변

8

상관 관계가있는 하위 쿼리를 사용할 수 있습니다.

UPDATE `pages` 
SET pages.`cache_links` = 
     (SELECT COUNT(*) 
     FROM backlinks 
     WHERE backlinks.`destination` = pages.`url` 
     AND  backlinks.`same_domain` = FALSE 
     ) 
WHERE pages.`url` = 'http://google.com/' 
+0

매력처럼 작동했습니다. 나는 너를 사랑해. 고마워. 제가 할 수있을 때 ~ 7 분 안에 답을 수락하겠습니다. –

+1

당신은 2 분 안에 이것을 대답했습니다! 그것은 일종의 속력 기록 일 것임에 틀림 없다. +1! –

관련 문제