2010-11-29 27 views
0

最新のMySQLを使用しています。MySQLでSELECTを使用してUPDATEを使用する方法

私は2つのテーブル: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! –

関連する問題