2010-11-29 3 views
0

Я использую последнюю версию MySQL.Как использовать UPDATE с SELECT в MySQL

У меня есть две таблицы: backlinks и pages.

Я пытаюсь обновить столбец cache_links в таблице pages для определенного URL-адреса. Столбец должен быть равен числу строк в 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 минут, когда смогу. – 2010-11-29 23:22:46

Смежные вопросы